如何在链接的 npm 依赖项(开发中)和安装的依赖项(staging/prod 中)之间切换?

How can I switch between a linked npm dependency (in development) and an installed dependency (in staging/prod)?

我有一个正在开发的自定义 npm 模块,它有一个 GitHub 存储库。我也在做一个使用自定义模块的项目。在处理较大的项目时,使用 npm link 非常好,这样我可以对模块进行更改并立即在主项目中看到它们。

要部署到暂存或生产环境,我使用 shrinkwrap 和 shrinkpack 这样我就可以在每次部署后执行 npm install (一些依赖项需要二进制文件,而开发系统与生产系统不同,所以它们确实需要安装,而不仅仅是保存在源代码管理中。 编辑: 我把它划掉了下面的回答在技术上解决了我的问题,即使它没有解决这个特定的问题,但这并不像其他问题那么重要。

当然,由于该模块链接到我的主项目并且未在 package.json 中列出,所以部署和安装完全错过了它。我可以继续将它列在 package.json 中并让它指向适当的 GitHub 存储库,但是每次我需要测试主项目中的更改时,我都必须提交并推送这些更改,然后更新主项目,终止并重新启动应用程序...这很快就会让人厌烦。

我想我需要一些与"devDependencies"相反的东西;我可以得到的东西 not 在 dev 上安装模块,但是 donpm install 时从 GitHub 安装它关于分期或生产。除了记住每次需要来回手动更改 package.json 之外,还有更好的方法吗?

您可以在 package.json 文件中指定 github 存储库作为要安装的包:

{
  dependencies: {
    "my-library": "githubusername/my-library"
  }
}

这将适用于您的生产环境。

在您的开发环境中,使用"npm link"。

从 "my-library" 文件夹中,直接 运行 npm link。这将告诉本地盒子上的 npm "my-library" 可以作为 link.

现在,在您使用 "my-library"、运行 npm link my-library 的项目中。这将为您的 "my-library" 的本地开发版本创建一个 symlink,允许您更改该存储库中的代码并使其在需要它的其他项目中工作。

准备好推送到生产环境后,将 "my-library" 推送到您的 github 存储库,然后您可以像往常一样在您的服务器上安装 npm。