有没有办法让“npm ci”安装 devDependencies 或“npm install”不更新 package-lock.json?

jos*_*osh 24 npm npm-install npm-ci

我正在尝试为新开发人员在他们的本地开发环境中安装我们的代码库整理文档。我想给他们以下命令:

  • 根据 package-lock.json 中的版本安装 devDependencies 和依赖项
  • 不更新 package-lock.json

“npm ci”几乎完全符合我的要求,但似乎没有安装 devDependencies。“npm install”确实会安装 devDependencies,但它有时会修改 package-lock.json。

我可以想象一些像“npm install && git checkout package-lock.json”这样的问题,但我觉得必须有一种更惯用的方式来表达“给我一个干净安装这个项目的开发依赖项?”

小智 37

npm ci确实安装了依赖项和开发依赖项。但是如果你使用npm ci --production或者你NODE_ENV设置为生产,那么它避免安装开发依赖项。请在此处查看文档。

使用--production标志(或当NODE_ENV环境变量设置为生产时),npm 将不会安装 devDependencies 中列出的模块。

注意:--production在向项目添加依赖项时,该标志没有特殊含义。

  • 对于未来的读者,只是为了澄清 @mattpr 的评论,“npm ci --product”确实按预期工作。(我测试过。)也许有人可以提出 PR 来更新“npm ci”文档。 (14认同)
  • 接下来,使用 --omit=dev 而不是 --product (8认同)
  • @Mark `npm install --no-save` 或 `npm ci`,然后是 `npm test`,然后是 `npm prune --product` (5认同)
  • 您链接到的文档适用于“npm install”。`npm ci` 页面未列出 **ANY** 命令行标志。`npm ci` 是否支持与 `npm install` 相同的命令行标志?如果是这种情况,我希望在文档中的某个地方明确指出这一点。否则,有很多关于“使用此标志”的答案,人们可​​能会向忽略它们的命令添加选项。如果我运行“npm install --foobar”,npm 不会警告或抱怨这是一个无效选项。很有可能很多人使用的 CLI 选项什么都不做。 (5认同)
  • 那么如何“npm install”然后“npm test”然后删除开发依赖项呢?如果您“npm install --only=生产”,那么您将无法运行测试。 (2认同)

Nik*_*hak 21

覆盖NODE_ENV变量

当您的NODE_ENV环境变量设置为production 时,使用npm ci不会安装 devDependencies。但是如果你还想安装devDependencies

npm ci --include=dev
Run Code Online (Sandbox Code Playgroud)

会做的伎俩;)


对于 NPM v7.x 之前的版本,请使用

npm ci --also=dev
Run Code Online (Sandbox Code Playgroud)

  • 从 v7 开始,“also”选项已被弃用。使用 `--include=dev` 代替。https://docs.npmjs.com/cli/v7/using-npm/config#also (5认同)