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

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

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

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

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

  • 创建项目 点击选择【在线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

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

  • 主要内容:敏捷项目管理的历史,敏捷项目管理的工作原理敏捷项目管理是一种管理软件开发的交互方法。敏捷项目管理侧重于持续发布,并涵盖每次迭代的客户反馈。 传统上,敏捷项目管理分为两个框架:Scrum和看板。Scrum框架侧重于固定长度的项目迭代,而看板框架则侧重于持续发布。在项目第一次迭代(或步骤)的竞争之后,项目管理活动立即转移到下一个。 敏捷项目管理的历史 敏捷项目管理在21世纪迅速崛起,它用于软件开发项目和其他IT计划。 然而,从20世纪中叶开始

  • 曾几何时,对于使用惯了C/C++语言的猿们来说,项目代码的组织与管理绝对是一场噩梦。为了解决C/C++项目的管理问题,猿神们想尽了各种办法,开发出了各种五花八门的项目管理工具,从一开始的automake到后来的cmake、qmake等等,但结果并不如人意,往往是解决了一些问题,却引入了更多的问题,C/C++猿们经常会陷入在掌握语言本身的同时,还要掌握复杂的构建工具语法的窘境。无独有偶,java的项