在处理节点项目时,我无法使用 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有什么变化吗?如果有,还有另一种规定的方法可以达到同样的效果吗?
答案 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。目前我上面写的解决方法应该可行。