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

'npm install --only=dev' deletes existing packages

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

为了详细说明,我正在使用 docker 为我的节点应用程序创建 productiontest 图像,其想法是production 映像将仅安装应用程序依赖项(例如 aws-sdk、xml-builder)。我在 production docker 图像中通过 运行 npm install -q --only=prod 执行此操作。

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

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

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

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

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

  • 首先在您的生产映像中执行 npm install --only=prod,然后在您的测试映像中执行 npm install

  • 在第一个 npm install.

    [ 之后删除 package-lock.json =42=]
  • 在每个 npm install 中使用选项 --no-package-lock

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

编辑:

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