' npm install --only = dev'删除现有包

时间:2017-07-05 23:50:02

标签: node.js npm-install

在处理节点项目时,我无法使用 npm 分离应用程序和测试依赖项的安装。我使用的是节点版本 8.1.2 和npm版本 5.0.3

详细说明,我正在使用docker为我的节点应用程序创建生产测试图像,并认为生产图像将具有仅安装了应用程序依赖项(例如aws-sdk,xml-builder)。我是通过在 production docker镜像中运行npm install -q --only=prod来完成此操作的。

test 图像扩展生产图像,并在其上安装测试依赖项(例如chai,mocha)。这是通过在 test docker镜像中运行npm install -q --only=dev命令来实现的。本练习的目的是创建一个干净的生产图像,该图像没有不必要的包。

但是当我执行后面的 npm 命令(npm install -q --only=dev)时,它会删除第一次安装时安装的软件包。我在另一个使用旧版本的npm和node的项目中做同样的事情,它运行正常。

最新版本的npm有什么变化吗?如果有,还有另一种规定的方法可以达到同样的效果吗?

1 个答案:

答案 0 :(得分:2)

这不是因为新版本的Node.js,而是因为新版本的 npm 捆绑在一起(第5版)。

在您的情况下,您可以执行以下操作之一:

  • 在生产图片中执行第一个npm install --only=prod,然后在测试图片中执行npm install

  • 在第一次 npm安装之后删除 package-lock.json

  • 在每个 npm安装中使用选项--no-package-lock

新的npm版本使用名为 package-lock.js 的新文件,产生此行为的文件,更多信息here

编辑:

我刚发现这是 npm 的问题,似乎是it will be fixed in the next release。目前我上面写的解决方法应该可行。