我使用node/npm的workspaces
特性,布局如下:
.
+-- package.json
`-- packages
`-- p1
`-- package.json
`-- p2
`-- package.json
./package.json
{
…
"workspaces": [
"./packages/*"
],
…
"dependcies": { … }
…
}
npm install
和一切都工作到目前为止。但是现在我想将p1
作为依赖项添加到p2
。但我该怎么做?我曾天真地尝试过:
./packages/p2/package.json
{
…
"dependencies": {
"p1": "*"
}
…
}
但是这在安装时会产生一个错误,告诉我在注册表中找不到p1
。
3条答案
按热度按时间9rygscc11#
UPDATE -使用npm cli
从项目根目录运行
./
是必须的,否则npm会混淆从npm注册表安装包和从本地目录安装包。手动解决方法
通过在p2package.json中提供p1的相对路径,手动添加p1作为本地依赖,因此在您的示例中:
然后需要运行p2包中的
npm install
。我从LinkedIn的一篇文章Things I wish I had known when I started JavaScript monorepo with Lerna中找到了这个解决方案。
icnyk63a2#
这种天真的方法应该有效,这让我怀疑你的设置可能有问题。有几件事你可以仔细检查一下:
./p1/package.json
中的"name"
字段是否正好是p1
?(例如,如果您正在使用范围名称,则可能需要在./p2/package.json
"dependencies"
中使用@scopename/p1
)npm -v
(当前为v7.23.0)p1
软件包在./node_modules
文件夹中正确地符号链接,例如:ls -l ./node_modules/p1
但我该怎么做?
假设一切都正确设置,您可以使用
-w <workspace-name>
参数将包添加为工作区(包括另一个工作区)的依赖项,例如:(添加p1
作为p2
的dep)npm install p1 -w p2
,参考:https://docs.npmjs.com/cli/v7/using-npm/workspaces#adding-dependencies-to-a-workspacencecgwcz3#
对于NPM工作区,不要在
./packages/p2/package.json
中指定对p1
的依赖。NPM会自动计算出你的本地依赖项。
如果在依赖项中指定
p1
,它将在项目P2node_modules
下安装一个过时版本。要在发生这种情况时修复此问题,请执行以下操作:1.删除P2的
node_modules
下的旧版本P11.删除
./packages/p2/package.json
中的P1
依赖项。1.重建一切。
希望他们能在文档中更好地解释这一点:docs.npmjs.com/cli/v9/using-npm/workspaces?v=true