'npm install –only = dev'删除现有的软件包

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

为了详细说明,我使用docker为我的节点应用程序创build生产testing图像,这个想法是生产映像只安装应用程序依赖项(例如aws-sdk,xml-builder)。 我正在通过在生产 npm install -q --only=prod运行npm install -q --only=prod来完成此操作。

testing图像扩展了生产映像,并在其上安装testing依赖关系(例如chai,mocha)。 这是通过在testing npm install -q --only=dev运行npm install -q --only=dev命令来实现的。 这个练习的目的是创build一个没有不必要的包的干净的生产形象。

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

在最新版本的npm中有没有改变? 如果有的话,是否有另一种达到相同效果的规定方式?

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

在你的情况下,你可以做的其中之一:

  • 在生产映像中执行第一个npm install --only=prod ,然后在您的testing映像中npm install

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

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

新的npm版本使用了一个名为package-lock.js的新文件,这是一个产生这种行为的文件, 这里有更多信息。

编辑:

我刚刚发现这是npm的一个问题,看来它会在下一个版本中修复 。 目前我上面写的解决方法应该工作。