为了运行devDependencies
测试套件并使用npm shrinkwrap
. 问题是,当我运行时npm install
,只安装了生产依赖项,为了安装devDependencies
,我必须删除 npm-shrinkwrap.json 并再次运行它。
现在,如果shrinkwrapdevDependencies
也包含它们,它们就会安装在不需要它们的生产环境中。当然应该有一些命令行参数来强制只安装正常的依赖项?
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 --dev
或npm install --force
可以超越收缩包装功能。
看起来这个功能是最近在 npm 客户端的 v3.3 中添加的,每个更新日志
您现在可以运行npm install --only=prod
以达到您想要的效果。
编辑2016/09/13
我已经测试了 npm v3.10.8,这个功能现在可以按预期工作。我们已经压缩了我们的 devDependencies,并且在部署时只能安装 prod 依赖项。
我认为值得一提的是,此功能应该很快就会按预期开始工作。根据这个 github issue,很多人都遇到了同样的问题,根据这个pull request,它将在下一个版本中发布(计划于 2016-09-08)。
合并拉取请求后,您所要做的就是:
npm i --only=prod
至于 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
这是固定的npm
3.10.8
;npm install --production
不应将开发部门安装在由以下人员创建的收缩包装中npm shrinkwrap --dev
:https ://github.com/npm/npm/releases/tag/v3.10.8