forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathnpm-installer.js
More file actions
1 lines (1 loc) · 1.68 KB
/
Copy pathnpm-installer.js
File metadata and controls
1 lines (1 loc) · 1.68 KB
1
var fs=require("fs-extra"),path=require("path"),spawn=require("child_process").spawn,Errors={NPM_INSTALL_FAILED:"NPM_INSTALL_FAILED"};function _performNpmInstall(installDirectory,npmOptions,callback){var npmPath,args=[path.resolve(path.dirname(require.resolve("npm")),"..","bin","npm-cli.js"),"install"].concat(npmOptions);console.log("running npm "+args.slice(1).join(" ")+" in "+installDirectory);var child=spawn(process.execPath,args,{cwd:installDirectory});child.on("error",function(err){return callback(err)});var stdout=[];child.stdout.addListener("data",function(buffer){stdout.push(buffer)});var stderr=[];child.stderr.addListener("data",function(buffer){stderr.push(buffer)});var exitCode=0;child.addListener("exit",function(code){exitCode=code}),child.addListener("close",function(){return stderr=Buffer.concat(stderr).toString(),stdout=Buffer.concat(stdout).toString(),exitCode>0?(console.error("npm-stderr: "+stderr),callback(new Error(stderr))):(stderr&&console.warn("npm-stderr: "+stderr),console.log("npm-stdout: "+stdout),callback())}),child.stdin.end()}function performNpmInstallIfRequired(npmOptions,validationResult,callback){function finish(){callback(null,validationResult)}var installDirectory=path.join(validationResult.extractDir,validationResult.commonPrefix),packageJson;try{packageJson=fs.readJsonSync(path.join(installDirectory,"package.json"))}catch(e){packageJson=null}if(!packageJson||!packageJson.dependencies||!Object.keys(packageJson.dependencies).length)return finish();_performNpmInstall(installDirectory,npmOptions,function(err){err&&validationResult.errors.push([Errors.NPM_INSTALL_FAILED,err.toString()]),finish()})}exports.performNpmInstallIfRequired=performNpmInstallIfRequired;