【问题标题】:Developing an npm package and a project that depends on it at the same time同时开发一个 npm 包和一个依赖它的项目
【发布时间】:2016-03-25 02:17:01
【问题描述】:

设置/工作流程:

项目 A 依赖于 package.json 中的自定义 npm 包。

随着工程师在项目 A 上工作,他们不可避免地也会对自定义 npm 包进行更改。这通过让他们克隆项目和自定义包存储库,然后应用npm link 来简化。

(来源:http://justjs.com/posts/npm-link-developing-your-own-npm-modules-without-tears

问题:

假设开发人员现在已经完成了对 Project A 和自定义 npm 包的更改。以下是接下来的步骤:

  1. 他或她必须为自定义包提交 Pull Request 并等待其进行代码审查和合并。

  2. 他或她现在必须打开 项目 A 的拉取请求,其中包含 package.json 中自定义包的版本号。

这感觉很笨拙,而且容易阻止我们的其他开发人员。

在构建自定义 npm 包和同时依赖它的项目时,是否有人对更好的工作流程有建议?

【问题讨论】:

    标签: javascript git npm


    【解决方案1】:

    我所做的是使用 username/repo#branch 作为 package.json 中的版本。这会导致 npm 绕过 npm 注册表直接从我在 GitHub 上的 fork 中提取。我倾向于只在我迫不及待地等待维护者将版本发布到 npm 注册表时才这样做(对我来说并不经常)。

    当维护者向 npm 发布版本时,我将版本号更新为新版本。另外,我不会在拉取请求中包含版本号,我总是让维护者决定如何更新版本。

    【讨论】:

    • 这可能是目前唯一的解决方案,但我们的团队正在为私有 npm 模块付费。如果最终能够使用 npm 注册表提供的语义版本控制,那就太好了。
    【解决方案2】:

    所以你的项目 A 依赖于包 B。首先,如果 B 正在快速开发中,那么让 A 依赖于 B 没有多大意义(通过在 package.json 中列出它并 'npm install'-ing 它):它会给你带来更多的痛苦而不是收获。取而代之的是,将 B 直接复制到 A 中并直接使用它(不使用任何 npm 机器)。

    只有当 B 的 API 变得足够稳定时,才将其作为单独的模块发布,并以 npm 方式依赖。

    但这还不是全部!为了使事物保持合理的分离和解耦,您应该使用 git 子模块。

    https://git-scm.com/book/en/v2/Git-Tools-Submodules

    git 的这一强大功能允许您将一个 git 存储库放入另一个 git 存储库中。这样,您的两个项目都可以很好地解耦;这也使得将 B 作为一个单独的单元发布的过程变得更加容易。

    我已经在两个独立的中型项目上尝试了这两种方法(a)npm 与 git 分支依赖对比 b)git 子模块,没有 npm),我更喜欢子模块:)

    【讨论】:

      【解决方案3】:

      我认为一种可能的解决方案是使用 Project Apackage.json 中的版本控制更加通用。

      我们可以在 semvar 语句中使用星号,而不是显式维护自定义 npm 模块依赖项的版本号。

      例如:

      "@org/custom-node-module": "0.1.2" - 每次更新 npm 包时都需要手动更改。

      "@org/custom-node-module": "0.*.*" - 运行 npm install 将始终获取最新的非破坏版本。

      【讨论】:

        猜你喜欢
        • 2018-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-05
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        • 2019-08-05
        相关资源
        最近更新 更多