0

我正在尝试将一个模块作为开发依赖项从 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.json并且packages/two/package.json看起来相似(名称字段除外):

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

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

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

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

但是,现在两者看起来packages/one/package.jsonpackages/two/package.json相似了(除了 name 字段)并且条目是作为 adependency而不是作为 a devDependency

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

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

编辑:

以防万一这很重要:

  • 勒纳版2.11.0
  • npm 版本5.8.0
  • 纱线版1.6.0
  • 节点版本v9.11.1
  • 工作环境Ubuntu 16.04
4

2 回答 2

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"
  }
}
于 2018-04-30T12:44:19.083 回答
0

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

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

你可以使用以下命令,因为你仍然在使用纱线: bash yarn lerna add angular --scope=one --dev

于 2018-09-08T18:09:10.547 回答