设置/工作流程:
项目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包的更改。以下是接下来的步骤:
他或她必须提交自定义程序包的Pull请求,并等待代码审核和合并。
他或她现在必须打开项目A 的拉取请求,其中包含npm link
中自定义程序包上的版本号。
这感觉很笨,很容易阻挡我们的其他开发者。
在构建自定义npm包和同时依赖它的项目时,是否有人建议更好的工作流程?
答案 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
将始终获取最新的非破坏版本。