使用带有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); }); });