当前位置: 首页 > 知识库问答 >
问题:

pnpm workspace,管理项目monorepo问题?

程博学
2024-05-07

pnpm的monorepo问题,
packages:

  • 'main'
  • 'web/**'
  • 'common'
  • 'common2'

common的package.json

{  "name": "common",  "version": "1.0.1",  "description": "",  "main": "index.js",  "scripts": {    "test": "echo \"Error: no test specified\" && exit 1"  },  "keywords": [],  "author": "",  "license": "ISC"}

在main文件里面pnpm -F main add common
但是添加的包,不是本地的,这个是什么问题

改动common的version版本号,子项目不能以0开头的版本号,
pnpm -F main add @project/common 也是不行, 是404,走npmjs库了

// ===========================================
windows:
node -v: v16.20.0
pnpm -v: 8.6.7
pnpm -F main common 完全ok
ubuntu:
node -v: v20.12.2
pnpm -v: 9.0.6

ubuntu 始终走的npm库 不知道为啥,修改过common的name, pnpm -F main add @project/common 不行。
ubuntu暂时没有很好的解决办法。

共有2个答案

陈淳
2024-05-07
  • 首先,确保你定义了Workspace,在项目根目录下应该有个 pnpm-workspaces.yaml文件,其中包含了当前workspace下的项目结构。
  • 其次, pnpm安装依赖时,如果没有特殊指定,它更倾向于使用远程的。确保你的根目录下有个 .npmrc配置文件,其内容是优先使用Workspace中的package

    link-workspace-packages = trueprefer-workspace-packages = truerecursive-install = true

    然后,在根目录下执行你之前的安装命令就可以嘞。

应志用
2024-05-07

pnpm 是一个高效的 JavaScript 包管理工具,特别适用于管理大型的 monorepo 项目。在 monorepo 中,通常会有多个包(package)共享同一个根目录,并且这些包之间可能会有相互依赖的关系。

首先,关于在 main 文件中使用 pnpm -F main add common 命令添加 common 包时,不是添加的本地包的问题:

当你运行 pnpm -F main add common 时,pnpm 会尝试从配置的源(例如 npm、Yarn 或其他自定义源)中查找名为 common 的包。由于你的项目中存在一个名为 common 的包,pnpm 可能会误将其视为一个 npm 包而不是本地的工作区包。

要解决这个问题,你需要确保 pnpm 能够正确地识别并链接到本地的工作区包。你可以尝试使用 @project/common 作为包的标识符,其中 @project 是你的工作区根目录的名称(通常是 package.json 文件所在的目录名称)。

因此,你应该在 main 项目的 package.json 文件中添加 @project/common 作为依赖项,而不是 common。你可以使用以下命令来添加依赖项:

pnpm -F main add @project/common

这样,pnpm 将正确地识别并链接到本地工作区中的 common 包。

接下来,关于版本号不能以 0 开头的问题:

版本号不能以 0 开头是一个常见的约定,因为某些包管理工具(如 npm)在处理以 0 开头的版本号时可能会遇到兼容性问题。然而,pnpm 本身并不限制版本号的格式。

如果你遇到 pnpm -F main add @project/common 命令返回 404 错误,并且尝试从 npm 仓库中查找包,那么问题可能在于你的 pnpm 配置或项目结构。

确保你的 pnpm 配置正确,特别是与 monorepo 相关的配置。你可以检查项目的根目录下的 pnpmfile.js(如果存在)以及 package.json 文件中的相关配置。

此外,确保你的项目结构符合 pnpm 的要求。通常,monorepo 的根目录应该包含一个 package.json 文件,其中列出了所有工作区包的信息。每个工作区包也应该有自己的 package.json 文件。

如果问题仍然存在,你可以尝试清理 pnpm 的缓存并重新安装依赖项。可以使用以下命令来清理缓存:

pnpm cache clean

然后,你可以尝试重新安装依赖项:

pnpm -F recursive install

这将递归地安装所有工作区包的依赖项,并确保它们正确链接。

希望这些解答能够帮助你解决问题!如果还有其他疑问或需要进一步的帮助,请随时提问。

 类似资料:
  • 创建项目 点击选择【在线AssetBundle检测】产品,您将进入到该产品的项目管理界面,如下图所示。 点击“+”号,即会出现如下项目创建界面。 填写项目信息,包括 项目名称、项目引擎、具体版本号 和 资源类型 后,点击 “下一步” 后完成项目创建,项目界面中将根据项目信息生成一个新的项目。 注意:在当前的UWA资源检测版本中,我们仅对Unity引擎的AssetBundle文件进行检测和分析。 上

  • 创建项目 点击选择【游戏/VR应用性能诊断与优化】产品,您将进入到该产品的项目管理界面,如下图所示。 通过简单三个步骤,即可创建评测项目。 点击 “+” 号,打开创建项目界面。 在界面中填写详细的项目信息,包括项目名称、发布平台、项目引擎和项目类型后,点击 “下载SDK” ,系统将根据您所选择的项目平台来下载对应的 UWA SDK,将在后续的SDK集成时使用。 点击 “下一步” 完成项目创建,项目

  • 进入San CLI UI的主页即为项目管理界面,可对显示的本地列表项目进行搜索、收藏、在编辑器打开、重命名、从San CLI UI删除(不会删除本地文件),删除后可通过导入项目重新显示在项目列表中,

  • 为了养成良好的习惯,我们把 ConTeXt 文档拆分到几个单独的.tex 文件中,这样维护起来比较方便。 首先是主文档 product.tex[73],生成 PDF 只要编译此文件即可 %%%%%此文件使用 product 环境,起始声明 \startproduct{} %%%导言区使用 \environment 载入文件 %载入样式文件 style.tex \environment style

  • 场景如下:有三个项目A,B,C,这三个项目的关系如下图 A是一个核心项目,其最终会使用Electron打成一个独立的项目A.EXE B项目是A项目的超集,在A的基础上会增加一部分功能,最终是一个B.WEB项目 C项目是B项目的超级,在B的基础上也会增加一部分功能,最终也会使用Electron打成一个独立的项目C.EXE 经过一番调研,前端打算使用pnpm构建Monorepo架构,初步设想如下: c

  • 项目管理 & 代码托管 Github [free to $] Codebase [$] Bitbucket [free to $] Unfuddle [$] Assembla [free to $]