Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何收缩包装devdependency,但除非必要,否则不安装它们?_Node.js_Npm - Fatal编程技术网

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安装而安装的,那么也不应该仅仅因为有一个锁文件就安装它们。这闻起来有不正确行为的味道。