mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Allow preInstall hook to return false to skip npm install
This commit is contained in:
parent
d2432716ea
commit
b4a03a56b4
@ -196,11 +196,15 @@ async function installModule(moduleDetails) {
|
|||||||
"version": moduleDetails.version,
|
"version": moduleDetails.version,
|
||||||
"dir": installDir,
|
"dir": installDir,
|
||||||
}
|
}
|
||||||
return hooks.trigger("preInstall", triggerPayload).then(() => {
|
return hooks.trigger("preInstall", triggerPayload).then((result) => {
|
||||||
// preInstall passed
|
// preInstall passed
|
||||||
// - run install
|
// - run install
|
||||||
|
if (result !== false) {
|
||||||
log.trace(NPM_COMMAND + JSON.stringify(args));
|
log.trace(NPM_COMMAND + JSON.stringify(args));
|
||||||
return exec.run(NPM_COMMAND, args, { cwd: installDir },true)
|
return exec.run(NPM_COMMAND, args, { cwd: installDir },true)
|
||||||
|
} else {
|
||||||
|
log.trace("skipping npm install");
|
||||||
|
}
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
return hooks.trigger("postInstall", triggerPayload)
|
return hooks.trigger("postInstall", triggerPayload)
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
|
@ -178,11 +178,15 @@ async function installModule(module,version,url) {
|
|||||||
"isUpgrade": isUpgrade
|
"isUpgrade": isUpgrade
|
||||||
}
|
}
|
||||||
|
|
||||||
return hooks.trigger("preInstall", triggerPayload).then(() => {
|
return hooks.trigger("preInstall", triggerPayload).then((result) => {
|
||||||
// preInstall passed
|
// preInstall passed
|
||||||
// - run install
|
// - run install
|
||||||
|
if (result !== false) {
|
||||||
log.trace(npmCommand + JSON.stringify(args));
|
log.trace(npmCommand + JSON.stringify(args));
|
||||||
return exec.run(npmCommand,args,{ cwd: installDir}, true)
|
return exec.run(npmCommand,args,{ cwd: installDir}, true)
|
||||||
|
} else {
|
||||||
|
log.trace("skipping npm install");
|
||||||
|
}
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
return hooks.trigger("postInstall", triggerPayload)
|
return hooks.trigger("postInstall", triggerPayload)
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
|
@ -123,6 +123,25 @@ describe("externalModules api", function() {
|
|||||||
fs.existsSync(path.join(homeDir,"externalModules")).should.be.true();
|
fs.existsSync(path.join(homeDir,"externalModules")).should.be.true();
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("skips npm install if preInstall returns false", async function() {
|
||||||
|
externalModules.init({userDir: homeDir});
|
||||||
|
externalModules.register("function", "libs");
|
||||||
|
let receivedPreEvent,receivedPostEvent;
|
||||||
|
hooks.add("preInstall", function(event) { receivedPreEvent = event; return false })
|
||||||
|
hooks.add("postInstall", function(event) { receivedPostEvent = event; })
|
||||||
|
|
||||||
|
await externalModules.checkFlowDependencies([
|
||||||
|
{type: "function", libs:[{module: "foo"}]}
|
||||||
|
])
|
||||||
|
exec.run.called.should.be.false();
|
||||||
|
receivedPreEvent.should.have.property("module","foo")
|
||||||
|
receivedPreEvent.should.have.property("version")
|
||||||
|
receivedPreEvent.should.have.property("dir")
|
||||||
|
receivedPreEvent.should.eql(receivedPostEvent)
|
||||||
|
fs.existsSync(path.join(homeDir,"externalModules")).should.be.true();
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
it("installs missing modules from inside subflow module", async function() {
|
it("installs missing modules from inside subflow module", async function() {
|
||||||
externalModules.init({userDir: homeDir});
|
externalModules.init({userDir: homeDir});
|
||||||
externalModules.register("function", "libs");
|
externalModules.register("function", "libs");
|
||||||
|
@ -291,16 +291,19 @@ describe('nodes/registry/installer', function() {
|
|||||||
}).catch(done);
|
}).catch(done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("fails install if preInstall hook fails", function(done) {
|
it("skips invoking npm if preInstall returns false", function(done) {
|
||||||
let receivedEvent;
|
let receivedEvent;
|
||||||
hooks.add("preInstall", function(event) { throw new Error("preInstall-error"); })
|
hooks.add("preInstall", function(event) { return false })
|
||||||
|
hooks.add("postInstall", function(event) { receivedEvent = event; })
|
||||||
var nodeInfo = {nodes:{module:"foo",types:["a"]}};
|
var nodeInfo = {nodes:{module:"foo",types:["a"]}};
|
||||||
|
|
||||||
installer.installModule("this_wont_exist","1.2.3").catch(function(err) {
|
installer.installModule("this_wont_exist","1.2.3").catch(function(err) {
|
||||||
exec.run.called.should.be.false();
|
exec.run.called.should.be.false();
|
||||||
|
should.exist(receivedEvent);
|
||||||
done();
|
done();
|
||||||
}).catch(done);
|
}).catch(done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("rollsback install if postInstall hook fails", function(done) {
|
it("rollsback install if postInstall hook fails", function(done) {
|
||||||
hooks.add("postInstall", function(event) { throw new Error("fail"); })
|
hooks.add("postInstall", function(event) { throw new Error("fail"); })
|
||||||
installer.installModule("this_wont_exist","1.2.3").catch(function(err) {
|
installer.installModule("this_wont_exist","1.2.3").catch(function(err) {
|
||||||
|
Loading…
Reference in New Issue
Block a user