【问题标题】:'npm install --only=dev' deletes existing packages'npm install --only=dev' 删除现有包
【发布时间】:2017-07-13 01:40:36
【问题描述】:

在处理节点项目时,我无法使用 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 命令来实现的。本练习的目的是创建一个干净的生产映像,其中没有不必要的包。

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

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

【问题讨论】:

    标签: node.js npm-install


    【解决方案1】:

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

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

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

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

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

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

    编辑:

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

    【讨论】:

    • 谢谢!我会投票赞成答案,除非我不能,因为我在这个社区没有足够的声誉。 :)
    • @NishantTrivedi 我处理好了 ;)
    • 此问题已在 npm 5.1.0 中修复
    猜你喜欢
    • 2018-07-28
    • 1970-01-01
    • 2016-08-18
    • 2021-11-11
    • 2019-01-16
    • 1970-01-01
    • 2018-12-29
    • 2016-01-08
    • 2020-10-22
    相关资源
    最近更新 更多