如何防止 npm 解析生产安装上的 devDependency

Jak*_*ake 7 node.js npm

我正在 monorepo 中构建一个微服务应用程序,其中包含一堆微服务和一个 commons 包。这个 commons 包从未发布到 npm。(包通过纱线工作区进行管理)

使用parcel,commons包被捆绑到生产代码中,所以我不需要在运行时安装它。

每个微服务都在自己的 Docker 容器中运行。因此,当我构建 docker 容器时,理想情况下,我想忽略这个“commons”依赖项并安装所有其他依赖项。AFAIK,执行此操作的唯一方法是将“commons”包放在 devDependency 中。

但是,似乎即使我仅将其添加到 devDependency 并运行npm i --only=production, npm 仍然尝试解析包并仍然抛出ETARGET错误。

有没有办法完全忽略 devDependency?我唯一的另一个想法是编写一个脚本,在运行 npm install 之前从 package.json 中删除 devDependencies 字段,但我想先在这里询问以确保我没有遗漏任何内容。

小智 7

npm/cli 存储库上有一个 GitHub 问题,在此处跟踪此问题 (#4967),此行为被归类为错误。

因此,为了回答你的问题,就 GitHub 问题的当前状态而言,预期的行为是不要devDependencies尝试在模式下解决--production,并且一旦已修复。我不认为你错过了什么。

您想到的解决方法对我来说听起来很合理。

在 GitHub 问题上,您可以通过竖起大拇指反应来表示“我也是”(请不要在评论中发送“我也是”评论)。