开发一个npm包和一个同时依赖它的项目

时间:2015-12-28 19:47:17

标签: javascript git npm

设置/工作流程:

项目A 依赖于Parse.Cloud.beforeSave("Car", function(request, response) { if (!request.object.isNew()) { // Let existing object updates go through response.success(); } var query = new Parse.Query("Car"); // Add query filters to check for uniqueness query.equalTo("number_plate", request.object.get("number_plate")); query.first().then(function(existingObject) { if (existingObject) { // Update existing object. here you can do all the object updates you want if (request.object.get("car_model") != undefined){ object.set("car_model",request.object.get("car_model")); } if (request.object.get("car_name") != undefined){ object.set("car_name",request.object.get("car_name")); } if (request.object.get("year") != undefined){ object.set("year",request.object.get("year")); } return existingObject.save(); response.error(); } else { // Pass a flag that this is not an existing object return Parse.Promise.as(false); } }).then(function(existingObject) { if (existingObject) { // Existing object, stop initial save response.error("Existing object"); } else { // New object, let the save go through response.success(); } }, function (error) { response.error(error); }); }); 中的自定义npm包。

当工程师在项目A 上工作时,他们也将不可避免地对自定义npm包进行更改。通过让他们克隆项目和自定义包repos,然后应用package.json来简化这一过程。

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

问题:

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

  1. 他或她必须提交自定义程序包的Pull请求,并等待代码审核和合并。

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

  3. 这感觉很笨,很容易阻挡我们的其他开发者。

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

所以你有一个项目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 repo放在另一个git repo中。这样,你的两个项目都能很好地解耦;这也使得将B作为一个单独的单位出版的过程变得更加容易。

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

答案 2 :(得分:0)

我认为一种可能的解决方案是在项目A package.json版本中更加通用。

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

例如:

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

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