【问题标题】:node workspaces — require local package节点工作区——需要本地包
【发布时间】:2021-10-14 15:45:31
【问题描述】:

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

.
+-- 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

【问题讨论】:

    标签: node.js npm npm-workspaces


    【解决方案1】:

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

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

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

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

    ./packages/p2/package.json
    
    {
      …
      "dependencies": {
        "p1": "file:../p1"
      }
      …
    }
    

    然后你需要在 p2 包中运行npm install

    我从 LinkedIn 文章 Things I wish I had known when I started JavaScript monorepo with Lerna 中找到了该解决方案。

    【讨论】:

      【解决方案2】:

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

      • ./p1/package.json 中的"name" 字段恰好是p1 吗? (例如,如果您使用范围名称,那么您可能需要在 ./p2/package.json "dependencies" 中使用 @scopename/p1 代替)
      • 您有最新版本的 npm cli 吗? 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-workspace

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-11
        • 1970-01-01
        • 2014-12-28
        • 2018-08-22
        • 2020-01-09
        • 1970-01-01
        • 1970-01-01
        • 2017-06-26
        相关资源
        最近更新 更多