Node.js 如何收缩包装devdependency,但除非必要,否则不安装它们?
我需要大量的Node.js 如何收缩包装devdependency,但除非必要,否则不安装它们?,node.js,npm,Node.js,Npm,我需要大量的devdependency,以便运行测试套件,并使用npm shrinkwrap锁定生产依赖项。问题是,当我运行npm install时,只安装了生产依赖项,为了安装devDependencies,我必须删除npm-shrinkwrap.json并再次运行它 现在,如果包覆面提取也包含devDependencies,那么它们将在生产中安装,而不需要安装。当然应该有一些命令行参数来强制只安装正常的依赖项吗?2016年9月: 正如其他人也提到的那样,从一开始,我们就付出了巨大的努力来增强
devdependency
,以便运行测试套件,并使用npm shrinkwrap
锁定生产依赖项。问题是,当我运行npm install
时,只安装了生产依赖项,为了安装devDependencies
,我必须删除npm-shrinkwrap.json并再次运行它
现在,如果包覆面提取也包含
devDependencies
,那么它们将在生产中安装,而不需要安装。当然应该有一些命令行参数来强制只安装正常的依赖项吗?2016年9月:
正如其他人也提到的那样,从一开始,我们就付出了巨大的努力来增强包覆面提取功能
由于,您可以在仅安装生产依赖项时锁定devdependency
:
npm shrinkwrap --dev
npm install --only=prod
2013答案: 如合同所述: 因为
npm shrinkwrap
旨在锁定您对
生产使用,devDependencies
将不包括在内,除非您
运行npm shrinkwrap时,显式设置--dev
标志。如果
已安装的devdependency
被排除在外,然后npm将打印一条警告。
如果您希望在默认情况下随模块一起安装,请
考虑将它们添加到依赖项中。
基本上,或者锁定所有部门,或者只锁定生产部门
即使不运行
npm安装--dev
或npm安装--force
也可以超越包覆面处理功能。这项功能似乎是最近根据
现在,您可以运行npm install--only=prod
来达到您想要的效果。编辑2016/09/13
我已经测试了NPMv3.10.8,这个功能现在可以正常工作了。我们已经压缩了devdependency,在部署时只能安装prod依赖项
我认为值得一提的是,这项功能应该很快就如预期的那样开始工作。根据这个github,很多人都遇到了同样的问题,根据这一点,它将在下一个版本中发布(计划于2016-09-08) 合并拉取请求后,您只需执行以下操作:
npm i --only=prod
这在
npm
3.10.8
中固定npm install--production
不应该在由npm shrinkwrap--dev创建的shrinkwrap中安装dev deps:至于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
所以基本上没有办法做我想要做的事情?通过CLI,看起来就是这样。您可以编写一些代码,可能是安装后的NPM脚本,例如,如果argv
--dev
被传递,则可以安装您的开发依赖项。这可能很快就会到来,请参阅此拉取请求:问题在于我不仅仅是在我的生产应用程序中使用收缩包装;我还使用锁定我的开发依赖项,这样我的CI测试就不会出错。@mikestaub它在3.10.8中被修补:不正确。这与npm install--production
相同,但同样存在被npm shrinkwrap.json
npm shrinkwrap覆盖的问题,对于懒惰的用户,这也=dev
。谢天谢地,这是一个很好的解决方案,但似乎在npm的5.x.x专业的某个地方已经停止了工作。有关更改的详细信息,请参阅。如果devDeps通常不是为-g安装而安装的,那么也不应该仅仅因为有一个锁文件就安装它们。这闻起来有不正确行为的味道。