我目前正在尝试使用spawn
运行流程。我试图从shell运行的是以下内容;
NODE_ENV=production node app/app.js
这是运行该代码的代码;
var spawn = require('child_process').spawn;
var start = spawn('NODE_ENV=production',['node','app/app.js']);
然而,我收到以下错误;
events.js:72
throw er; // Unhandled 'error' event
^
Error: spawn ENOENT
at errnoException (child_process.js:980:11)
at Process.ChildProcess._handle.onexit (child_process.js:771:34)
如何使用spawn
?
答案 0 :(得分:51)
您的usage of spawn不正确:
spawn( command, args, options )
:使用给定命令启动一个新进程,在args中使用命令行参数。如果省略,则args默认为空数组。
第三个参数用于指定其他选项,默认为:
{cwd:undefined,env:process.env}
使用env指定新进程可见的环境变量,默认为process.env。
所以应该在options参数上提供env变量NODE_ENV
:
// clone the actual env vars to avoid overrides
var env = Object.create( process.env );
env.NODE_ENV = 'test';
spawn( 'node', ['app.js'], { env: env } );
答案 1 :(得分:10)
语法:spawn(command,[args],[options])
var spawn = require('child_process').spawn;
var start = spawn('node', ['app.js'], {env: {NODE_ENV: 'production'}});
或保留默认的ENV变量:
var spawn = require('child_process').spawn;
var productionEnv = process.env; // TODO should clone process.env like utils.extend
productionEnv.NODE_ENV = 'production';
var start = spawn('node', ['app.js'], {env: productionEnv});
我的测试:
app.js
console.log(process.env);
spawn.js
var spawn = require('child_process').spawn;
var start = spawn('node', ['app.js'], {env: {NODE_ENV: 'production'}});
start.stdout.pipe(process.stdout);
来自终端:
node spawn
输出:
{ NODE_ENV: 'production' }
答案 2 :(得分:6)
这对我有用
var spawn = require('child_process').spawn;
var productionEnv = Object.create(process.env);
productionEnv.NODE_ENV = 'production';
var start = spawn('node', ['app.js'], {env: productionEnv});
这不是
var spawn = require('child_process').spawn;
var start = spawn('node', ['app.js'], {env: {NODE_ENV: 'production'}});
答案 3 :(得分:0)
添加shell选项为我工作
gulp.task('xxx', function (callback) {
process.chdir('xxx/');
var spawn = require('child_process').spawn;
var productionEnv = Object.create(process.env);
// var jekyll = spawn('gulp', ['stylecheck'], {stdio: 'inherit', env: productionEnv});
var jekyll = spawn('gulp', ['stylecheck'], {stdio: 'inherit', env: productionEnv, shell: true});
jekyll.on('exit', function (code) {
console.log(arguments);
});
});