假设我有一个全局组件叫abcd,然后想在project1中添加它:
但是当我运行pnpm add abcd@1.0.0 --workspace
后,package.json中的版本显示为"workspace:^"
而不是workspace:1.0.0
,是有什么默认的配置之类的东西影响了吗?
假设我有一个全局组件叫abcd,然后想在project1中添加它:
但是当我运行pnpm add abcd@1.0.0 --workspace
后,package.json中的版本显示为"workspace:^"
而不是workspace:1.0.0
,是有什么默认的配置之类的东西影响了吗?
在 pnpm
的 monorepo 环境中,当你尝试添加一个本地包(比如 abcd
)到一个工作区(workspace)时,pnpm
默认会使用工作区范围的依赖(workspace range dependencies),这解释了为什么你的 package.json
文件中会显示为 "workspace:^"
而不是具体的版本号如 1.0.0
。
工作区范围的依赖允许你在不同的工作区之间共享本地包,并且 pnpm
会自动解析这些依赖到正确的版本,无需显式指定版本号。这种方式使得在开发过程中更容易管理和更新本地包。
尽管 pnpm
默认使用工作区范围的依赖,但如果你确实需要显式指定一个本地包的版本(例如,出于兼容性或测试的目的),你可以采取以下几种方法之一:
abcd
)的 package.json
文件中的版本号,将其更改为你想要的版本(如 1.0.0
),然后重新运行 pnpm install
或 pnpm add abcd --workspace
。但请注意,这会影响所有使用该本地包的工作区。resolutions
字段(不推荐):pnpm
支持 resolutions
字段来覆盖依赖树的特定版本,但这通常用于解决依赖冲突,而不是用于指定本地工作区依赖的版本。此外,resolutions
字段在 npm 中不受支持,可能会导致跨包管理工具的不一致性。在大多数情况下,使用 pnpm
的工作区范围依赖是处理 monorepo 中本地包依赖的最佳方式。如果你确实需要指定版本,考虑上述提到的替代方案。通常,修改本地包的版本号并在 monorepo 中重新安装依赖是最直接和简单的方法。
6 回答3k 阅读✓ 已解决
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
6 回答2.4k 阅读
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决