mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Allow npm install args to be customised by preInstall trigger
This commit is contained in:
		| @@ -190,16 +190,18 @@ async function installModule(moduleDetails) { | ||||
|  | ||||
|     await ensureModuleDir(); | ||||
|  | ||||
|     var args = ["install", installSpec, "--production"]; | ||||
|     let triggerPayload = { | ||||
|         "module": moduleDetails.module, | ||||
|         "version": moduleDetails.version, | ||||
|         "dir": installDir, | ||||
|         "args": ["--production"] | ||||
|     } | ||||
|     return hooks.trigger("preInstall", triggerPayload).then((result) => { | ||||
|         // preInstall passed | ||||
|         // - run install | ||||
|         if (result !== false) { | ||||
|             let extraArgs = triggerPayload.args || []; | ||||
|             let args = ['install', ...extraArgs, installSpec] | ||||
|             log.trace(NPM_COMMAND + JSON.stringify(args)); | ||||
|             return exec.run(NPM_COMMAND, args, { cwd: installDir },true) | ||||
|         } else { | ||||
|   | ||||
| @@ -168,20 +168,22 @@ async function installModule(module,version,url) { | ||||
|         } | ||||
|  | ||||
|         var installDir = settings.userDir || process.env.NODE_RED_HOME || "."; | ||||
|         var args = ['install','--no-audit','--no-update-notifier','--no-fund','--save','--save-prefix=~','--production',installName]; | ||||
|         let triggerPayload = { | ||||
|             "module": module, | ||||
|             "version": version, | ||||
|             "url": url, | ||||
|             "dir": installDir, | ||||
|             "isExisting": isExisting, | ||||
|             "isUpgrade": isUpgrade | ||||
|             "isUpgrade": isUpgrade, | ||||
|             "args": ['--no-audit','--no-update-notifier','--no-fund','--save','--save-prefix=~','--production'] | ||||
|         } | ||||
|  | ||||
|         return hooks.trigger("preInstall", triggerPayload).then((result) => { | ||||
|             // preInstall passed | ||||
|             // - run install | ||||
|             if (result !== false) { | ||||
|                 let extraArgs = triggerPayload.args || []; | ||||
|                 let args = ['install', ...extraArgs, installName] | ||||
|                 log.trace(npmCommand + JSON.stringify(args)); | ||||
|                 return exec.run(npmCommand,args,{ cwd: installDir}, true) | ||||
|             } else { | ||||
|   | ||||
| @@ -48,13 +48,13 @@ describe("externalModules api", function() { | ||||
|         beforeEach(function() { | ||||
|             sinon.stub(exec,"run").callsFake(async function(cmd, args, options) { | ||||
|                 let error; | ||||
|                 if (args[1] === "moduleNotFound") { | ||||
|                 if (args[2] === "moduleNotFound") { | ||||
|                     error = new Error(); | ||||
|                     error.stderr = "E404"; | ||||
|                 } else if (args[1] === "moduleVersionNotFound") { | ||||
|                 } else if (args[2] === "moduleVersionNotFound") { | ||||
|                     error = new Error(); | ||||
|                     error.stderr = "ETARGET"; | ||||
|                 } else if (args[1] === "moduleFail") { | ||||
|                 } else if (args[2] === "moduleFail") { | ||||
|                     error = new Error(); | ||||
|                     error.stderr = "Some unexpected install error"; | ||||
|                 } | ||||
| @@ -109,13 +109,14 @@ describe("externalModules api", function() { | ||||
|             externalModules.init({userDir: homeDir}); | ||||
|             externalModules.register("function", "libs"); | ||||
|             let receivedPreEvent,receivedPostEvent; | ||||
|             hooks.add("preInstall", function(event) { receivedPreEvent = event; }) | ||||
|             hooks.add("preInstall", function(event) { event.args = ["a"]; receivedPreEvent = event; }) | ||||
|             hooks.add("postInstall", function(event) { receivedPostEvent = event; }) | ||||
|  | ||||
|             await externalModules.checkFlowDependencies([ | ||||
|                 {type: "function", libs:[{module: "foo"}]} | ||||
|             ]) | ||||
|             exec.run.called.should.be.true(); | ||||
|             // exec.run.lastCall.args[1].should.eql([ 'install', 'a', 'foo' ]); | ||||
|             receivedPreEvent.should.have.property("module","foo") | ||||
|             receivedPreEvent.should.have.property("version") | ||||
|             receivedPreEvent.should.have.property("dir") | ||||
|   | ||||
| @@ -254,7 +254,7 @@ describe('nodes/registry/installer', function() { | ||||
|  | ||||
|         it("triggers preInstall and postInstall hooks", function(done) { | ||||
|             let receivedPreEvent,receivedPostEvent; | ||||
|             hooks.add("preInstall", function(event) { receivedPreEvent = event; }) | ||||
|             hooks.add("preInstall", function(event) { event.args = ["a"]; receivedPreEvent = event; }) | ||||
|             hooks.add("postInstall", function(event) { receivedPostEvent = event; }) | ||||
|             var nodeInfo = {nodes:{module:"foo",types:["a"]}}; | ||||
|             var res = {code: 0,stdout:"",stderr:""} | ||||
| @@ -267,6 +267,8 @@ describe('nodes/registry/installer', function() { | ||||
|             }); | ||||
|  | ||||
|             installer.installModule("this_wont_exist","1.2.3").then(function(info) { | ||||
|                 exec.run.called.should.be.true(); | ||||
|                 exec.run.lastCall.args[1].should.eql([ 'install', 'a', 'this_wont_exist@1.2.3' ]); | ||||
|                 info.should.eql(nodeInfo); | ||||
|                 should.exist(receivedPreEvent) | ||||
|                 receivedPreEvent.should.have.property("module","this_wont_exist") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user