43

为了运行devDependencies测试套件并使用npm shrinkwrap. 问题是,当我运行时npm install,只安装了生产依赖项,为了安装devDependencies,我必须删除 npm-shrinkwrap.json 并再次运行它。

现在,如果shrinkwrapdevDependencies也包含它们,它们就会安装在不需要它们的生产环境中。当然应该有一些命令行参数来强制只安装正常的依赖项?

4

5 回答 5

50

2016 年 9 月:

正如其他人也提到的那样,从npm v3.10.8开始,我们在增强收缩包装功能方面付出了巨大的努力。

多亏了这一点,在仅安装生产依赖项时可以保持devDependencies锁定状态:

npm shrinkwrap --dev
npm install --only=prod

2013年回答:

NPM 文档中所述:

由于npm shrinkwrap旨在锁定您的依赖项以供生产使用,除非您在运行 npm shrinkwrap 时devDependencies显式设置标志,否则不会包含在内。--dev如果已devDependencies排除已安装,则 npm 将打印警告。如果您希望它们默认与您的模块一起安装,请考虑将它们添加到依赖项中。

基本上,或者你锁定所有部门,或者只锁定生产部门。

甚至不运行npm install --devnpm install --force可以超越收缩包装功能。

于 2013-07-09T15:31:01.627 回答
1

看起来这个功能是最近在 npm 客户端的 v3.3 中添加的,每个更新日志

您现在可以运行npm install --only=prod以达到您想要的效果。

于 2015-12-03T23:22:24.440 回答
1

编辑2016/09/13

我已经测试了 npm v3.10.8,这个功能现在可以按预期工作。我们已经压缩了我们的 devDependencies,并且在部署时只能安装 prod 依赖项。


我认为值得一提的是,此功能应该很快就会按预期开始工作。根据这个 github issue,很多人都遇到了同样的问题,根据这个pull request,它将在下一个版本中发布(计划于 2016-09-08)。

合并拉取请求后,您所要做的就是:

npm i --only=prod
于 2016-08-31T14:23:36.413 回答
1

至于 npm 5(我已经尝试过 5.5.1 和 5.6.0),--production--only=prod)标志是有问题的。

当文件夹中存在package-lock.json时,

npm shrinkwrap --production

只需将文件名更改为npm-shrinkwrap.json

我设法解决这个问题的方法是运行:

npm prune --production

然后运行:

npm shrinkwrap --production
于 2017-12-10T14:49:19.320 回答
0

这是固定的npm 3.10.8npm install --production不应将开发部门安装在由以下人员创建的收缩包装中npm shrinkwrap --devhttps ://github.com/npm/npm/releases/tag/v3.10.8

于 2016-09-15T21:22:20.953 回答