【问题标题】:Install dependencies using lerna fails使用 lerna 安装依赖项失败
【发布时间】:2018-09-09 02:09:10
【问题描述】:

我正在尝试将一个模块作为来自 npm 的开发依赖项添加到我的 lerna 存储库中的几个模块之一,但是这样做时,该模块既没有添加到我的一个模块中,也没有添加为开发依赖。相反,它被添加到我所有的本地模块中,并且它也被添加为正常的依赖项。

我创建了以下内容:

mkdir FirstProject
cd FirstProject
yarn init
yarn add lerna --dev
npm run env lerna init
mkdir packages/one
mkdir packages/two
cd packages/one
yarn init
cd ../..
cd packages/two
yarn init
cd ../..

我现在有以下树结构:

myuser@mylaptop:~/FirstProject$ tree -I node_modules
.
├── lerna.json
├── package.json
├── packages
│   ├── one
│   │   └── package.json
│   └── two
│       └── package.json
└── yarn.lock

packages/one/package.jsonpackages/two/package.json 看起来都一样(名称字段除外):

{
  "name": "one",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT"
}

如果我现在尝试在packages/one 中安装一个新的devDependency,即angular,我可以先cd packages/one 然后yarn add angular --dev

但正如lerna documentation 中所建议的,有一个lerna add 命令应该可以做到这一点。执行上述操作的命令应该如下:

npm run env lerna add angular --scope=one --dev

但是,现在packages/one/package.jsonpackages/two/package.json 看起来又相似了(名称字段除外),并且条目是dependency 而不是devDependency

{
  "name": "one",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "angular": "^1.6.10"
  }
}

这是一个错误还是我做错了什么?

编辑:

以防万一:

  • lerna 版本2.11.0
  • npm 版本5.8.0
  • 纱版1.6.0
  • 节点版本v9.11.1
  • 工作环境Ubuntu 16.04

【问题讨论】:

    标签: lerna


    【解决方案1】:

    你忘了提到 lerna init 创建 lerna.json 的最后一步 :-)

    无论如何,尝试使用 npm>5.2:

    npx lerna add angular --scope=one --dev
    

    npx --help:从 npm 包执行二进制文件。

    或手动执行二进制文件:

    ./node_modules/.bin/lerna add angular --scope=one --dev
    

    我确实得到了结果:

    {
      "name": "one",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "devDependencies": {
        "angular": "^1.6.10"
      }
    }
    

    【讨论】:

    • 不,没有忘记lerna init。使用命令npm run env lerna init 做到这一点(参见下面的第一个代码部分yarn add lerna --dev)。
    • 好的,只需按照您的建议使用npx 即可。 npm run env ... 似乎有困难。非常感谢您的帮助。
    • 我明白了,对此感到抱歉。但无论如何,它应该像我用npxnode_modules/.bin 解释的那样工作。使用 npm run env 时将其添加为依赖项
    【解决方案2】:

    @Socrates,让您知道这个谜团的答案非常简单。 npm run 会忽略所有 --something 参数,除非您在这些参数之前添加一个单独的 -- 。

    bash npm run lerna add angular -- --scope=one --dev

    您本来可以使用以下命令,因为无论如何您都在使用 yarn: bash yarn lerna add angular --scope=one --dev

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 2020-12-27
      • 1970-01-01
      • 2014-11-27
      相关资源
      最近更新 更多