使用带有NODE_ENV = production的spawn函数

时间:2013-12-29 12:27:02

标签: node.js

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

执行此操作

4 个答案:

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

另见How do I debug "Error: spawn ENOENT" on node.js?

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