如何防止npm在生产安装时解析devDependencies

7

我正在使用单一代码库构建一个微服务应用程序,其中包含一组微服务和一个公共包。这个公共包从未发布到npm。(使用yarn工作区管理包)

使用parcel将公共包打包成生产代码,因此我不需要在运行时安装它。

每个微服务运行在自己的docker容器中。所以,当我构建docker容器时,理想情况下,我希望忽略这个“commons”依赖项并安装所有其他依赖项。据我所知,唯一的方法是将“commons”包放在devDependencies中。

然而,即使我只将其添加到devDependencies,并运行npm i --only=production,npm仍然会尝试解析该包,并且仍然会抛出一个ETARGET错误。

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


在输入 npm install 后,只应安装没有 "commons" 包的包? - jacobkim
2个回答

6

在 npm/cli 存储库上有一个 GitHub 问题追踪此问题,您可以在这里(#4967)查看,并将该行为归类为 bug。

所以,就目前 GitHub 问题的状态而言,预期行为是在 --production 模式下不会尝试解析 devDependencies,一旦修复成功,则无需执行任何额外操作即可实现这种行为。我认为您没有遗漏任何内容。

我认为您想到的解决方法很合理。

您可以使用点赞反应在 GitHub 上表示“我也是”(请不要在评论中发送“我也是”等信息来干扰评论区)。


-1

1
我知道。我试过了,但即使它不安装开发依赖项,它似乎仍然尝试解决它们。 - Jake
1
我确认,在生产模式下解决了开发依赖项,即使它们没有被安装。任何解决错误(例如注册表身份验证)都会导致错误并阻止安装过程。 - flchaux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接