如何收缩devDeDependencies,但不安装它们,除非必要?
为了运行testing套件,我需要一堆devDependencies
,并使用npm shrinkwrap
devDependencies
来locking生产依赖关系。 问题是,当我运行npm install
,只npm install
了生产依赖项,为了安装devDependencies
,我必须删除npm- devDependencies
并再次运行它。
现在,如果devDependencies
也包含devDependencies
,它们会在生产环境中安装,不需要它们。 当然,应该有一些命令行参数强制只安装正常的依赖关系?
2016年9月:
正如其他人所说的那样,从npm v3.10.8开始,为了提高收缩包装function做了一些巨大的努力。
由于这个原因 ,在安装生产依赖关系的时候可以保持devDependencies
被locking:
npm shrinkwrap --dev npm install --only=prod
2013答案:
正如NPM文档所述 :
由于
npm shrinkwrap
旨在locking用于生产使用的依赖关系,devDependencies
除非在运行npm--dev
时显式设置--dev
标志,否则不会包含--dev
。 如果安装devDependencies
被排除,那么npm将会打印一个警告。 如果您希望默认将它们安装到模块中,请考虑将它们添加到依赖关系中。
基本上,或者你locking所有的deps,或者只有生产deps。
甚至不运行npm install --dev
或npm install --force
可以超越npm install --dev
function。
看起来这个特性最近被添加到npm客户端的每个更新日志的 v3.3中
你现在可以运行npm install --only=prod
来达到你想要的效果。
编辑 2016年9月13日
我已经testing了npm v3.10.8,这个function现在按预期工作。 我们缩小了devDependencies,并且只能在部署时安装prod依赖。
我认为值得一提的是,这个function应该很快就能像预期的那样开始工作。 根据这个github 问题 ,大量的人遇到了同样的问题,根据这个请求 ,它将在下一个版本(计划于2016-09-08)发布。
随着拉入请求合并,你所要做的就是:
npm i --only=prod
这固定在npm
3.10.8
; npm install --production
不应该安装在由npm shrinkwrap --dev
: https : //github.com/npm/npm/releases/tag/v3.10.8创build的npm shrinkwrap --dev