4

我正在使用node/npmworkspaces的功能,布局是这样的:

.
+-- package.json
`-- packages
   `-- p1
      `-- package.json
   `-- p2
      `-- package.json
./package.json

{
  …
  "workspaces": [
    "./packages/*"
  ],
  …
  "dependcies": { … }
  …
}

npm install一切都很顺利。但现在我想将包p1作为依赖项添加到 package p2。但是我该怎么做呢?我天真地尝试过:

./packages/p2/package.json

{
  …
  "dependencies": {
    "p1": "*"
  }
  …
}

但这会在安装时产生错误,告诉我p1找不到注册表。

4

2 回答 2

7

更新 - 使用 npm cli
从项目根目录运行

npm i ./packages/p1 -w packages/p2

./必须的,否则 npm 会将安装混淆为来自 npm 注册表的包安装与来自本地目录的包安装。

手动解决方法通过在p2 package.json中提供p1 的相对路径
手动将p1添加为本地依赖项,因此在您的示例中:

./packages/p2/package.json

{
  …
  "dependencies": {
    "p1": "file:../p1"
  }
  …
}

然后你需要npm installp2包中运行。

我从 LinkedIn 的一篇文章中找到了该解决方案,我希望我在使用 Lerna 启动 JavaScript monorepo 时就已经知道了

于 2021-09-12T23:20:31.623 回答
1

这种天真的方法应该有效,这让我怀疑您的设置可能有问题。您可以仔细检查几件事:

  • "name"字段是否./p1/package.json准确p1?(例如,如果您使用的是作用域名称,那么您可能需要使用@scopename/p1in./p2/package.json "dependencies"代替)
  • 你有最新版本的npm cli吗?npm -v(当前为 v7.23.0)
  • 确保p1包在./node_modules文件夹中正确符号链接,例如:ls -l ./node_modules/p1

但是我该怎么做呢?

鉴于一切都已正确设置,您可以使用-w <workspace-name>参数将包添加为工作区(包括另一个工作区)的依赖项,例如:(添加p1为 dep p2npm install p1 -w p2,参考:https ://docs.npmjs.com/cli/v7 /using-npm/workspaces#adding-dependencies-to-a-workspace

于 2021-09-13T14:52:19.743 回答