'npm install --only=dev' 删除现有包
'npm install --only=dev' deletes existing packages
在处理节点项目时,我无法使用 npm 分离应用程序的安装和测试依赖项。我正在使用节点版本 8.1.2 和 npm 版本 5.0.3.
为了详细说明,我正在使用 docker 为我的节点应用程序创建 production 和 test 图像,其想法是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。目前,我上面写的解决方法应该可以工作。
在处理节点项目时,我无法使用 npm 分离应用程序的安装和测试依赖项。我正在使用节点版本 8.1.2 和 npm 版本 5.0.3.
为了详细说明,我正在使用 docker 为我的节点应用程序创建 production 和 test 图像,其想法是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。目前,我上面写的解决方法应该可以工作。