使用带有NODE_ENV =产生的产卵函数

我目前正在尝试使用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

你使用的产卵是不正确的

spawn( command, args, options )

使用给定的命令启动一个新的进程,在args中带有命令行参数。 如果省略,则args默认为空数组。

第三个参数用于指定其他选项,默认为:

{cwd:undefined,env:process.env}

使用env指定新进程可见的环境variables,缺省值为process.env。

所以应该在options参数中提供envvariablesNODE_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 } ); 

另请参阅如何在node.js上debugging“错误:产生ENOENT”?

语法:spawn(command,[args],[options])

 var spawn = require('child_process').spawn; var start = spawn('node', ['app.js'], {env: {NODE_ENV: 'production'}}); 

或保持默认的ENVvariables:

 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}); 

我的testing:

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); 

从terminal:

 node spawn 

输出:

 { NODE_ENV: 'production' } 

这对我有效

 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'}}); 

添加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); }); });