1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00

Move node install to spawn to allow for big stdout

Fixes #1488
This commit is contained in:
Nick O'Leary 2018-01-24 22:40:42 +00:00
parent e7960d1d44
commit 4b129d94e4
No known key found for this signature in database
GPG Key ID: 4F2157149161A6C9

View File

@ -70,7 +70,6 @@ function checkExistingModule(module,version) {
} }
return false; return false;
} }
function installModule(module,version) { function installModule(module,version) {
//TODO: ensure module is 'safe' //TODO: ensure module is 'safe'
return when.promise(function(resolve,reject) { return when.promise(function(resolve,reject) {
@ -98,44 +97,50 @@ function installModule(module,version) {
} }
var installDir = settings.userDir || process.env.NODE_RED_HOME || "."; var installDir = settings.userDir || process.env.NODE_RED_HOME || ".";
var child = child_process.execFile(npmCommand,['install','--save','--save-prefix="~"','--production',installName], var child = child_process.spawn(npmCommand,['install','--save','--save-prefix="~"','--production',installName],{
{ cwd: installDir,
cwd: installDir shell: true
}, });
function(err, stdin, stdout) { var output = "";
if (err) { child.stdout.on('data', (data) => {
var e; output += data;
var lookFor404 = new RegExp(" 404 .*"+module+"$","m"); });
var lookForVersionNotFound = new RegExp("version not found: "+module+"@"+version,"m"); child.stderr.on('data', (data) => {
if (lookFor404.test(stdout)) { output += data;
log.warn(log._("server.install.install-failed-not-found",{name:module})); });
e = new Error("Module not found"); child.on('close', (code) => {
e.code = 404; if (code !== 0) {
reject(e); var e;
} else if (isUpgrade && lookForVersionNotFound.test(stdout)) { var lookFor404 = new RegExp(" 404 .*"+module,"m");
log.warn(log._("server.install.upgrade-failed-not-found",{name:module})); var lookForVersionNotFound = new RegExp("version not found: "+module+"@"+version,"m");
e = new Error("Module not found"); if (lookFor404.test(output)) {
e.code = 404; log.warn(log._("server.install.install-failed-not-found",{name:module}));
reject(e); e = new Error("Module not found");
} else { e.code = 404;
log.warn(log._("server.install.install-failed-long",{name:module})); reject(e);
log.warn("------------------------------------------"); } else if (isUpgrade && lookForVersionNotFound.test(output)) {
log.warn(err.toString()); log.warn(log._("server.install.upgrade-failed-not-found",{name:module}));
log.warn("------------------------------------------"); e = new Error("Module not found");
reject(new Error(log._("server.install.install-failed"))); e.code = 404;
} reject(e);
} else { } else {
if (!isUpgrade) { log.warn(log._("server.install.install-failed-long",{name:module}));
log.info(log._("server.install.installed",{name:module})); log.warn("------------------------------------------");
resolve(require("./index").addModule(module).then(reportAddedModules)); log.warn(output);
} else { log.warn("------------------------------------------");
log.info(log._("server.install.upgraded",{name:module, version:version})); reject(new Error(log._("server.install.install-failed")));
events.emit("runtime-event",{id:"restart-required",payload:{type:"warning",text:"notification.warnings.restartRequired"},retain:true}); }
resolve(require("./registry").setModulePendingUpdated(module,version)); } else {
} if (!isUpgrade) {
log.info(log._("server.install.installed",{name:module}));
resolve(require("./index").addModule(module).then(reportAddedModules));
} else {
log.info(log._("server.install.upgraded",{name:module, version:version}));
events.emit("runtime-event",{id:"restart-required",payload:{type:"warning",text:"notification.warnings.restartRequired"},retain:true});
resolve(require("./registry").setModulePendingUpdated(module,version));
} }
} }
); });
}); });
} }