node.js 在 NODE_ENV=production 中使用 spawn 函数
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20825157/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Using spawn function with NODE_ENV=production
提问by aacanakin
I'm currently trying to run process using spawn. What I am trying to run from shell is the following;
我目前正在尝试使用spawn. 我试图从 shell 运行的是以下内容;
NODE_ENV=production node app/app.js
NODE_ENV=production node app/app.js
Here's the code to run that;
这是运行它的代码;
var spawn = require('child_process').spawn;
var start = spawn('NODE_ENV=production',['node','app/app.js']);
However, I got the following error;
但是,我收到以下错误;
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)
How can I do that using spawn?
我怎样才能做到这一点spawn?
回答by laconbass
Your usage of spawnis not correct:
您对 spawn 的使用不正确:
spawn( command, args, options ):Launches a new process with the given command, with command line arguments in args. If omitted, args defaults to an empty Array.
The third argument is used to specify additional options, which defaults to:
{ cwd: undefined, env: process.env }
Use env to specify environment variables that will be visible to the new process, the default is process.env.
spawn( command, args, options ):使用给定的命令启动一个新进程,在 args 中带有命令行参数。如果省略,args 默认为空数组。
第三个参数用于指定附加选项,默认为:
{ cwd:未定义,环境:process.env }
使用 env 指定对新进程可见的环境变量,默认为 process.env。
So the env variable NODE_ENVshould be provided on the options argument:
因此,NODE_ENV应在 options 参数上提供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 } );
回答by damphat
Syntax: spawn(command, [args], [options])
语法:spawn(command, [args], [options])
var spawn = require('child_process').spawn;
var start = spawn('node', ['app.js'], {env: {NODE_ENV: 'production'}});
Or keep default ENV variables:
或者保留默认的 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});
My test:
我的测试:
app.js
应用程序.js
console.log(process.env);
spawn.js
生成.js
var spawn = require('child_process').spawn;
var start = spawn('node', ['app.js'], {env: {NODE_ENV: 'production'}});
start.stdout.pipe(process.stdout);
from terminal:
从终端:
node spawn
output:
输出:
{ NODE_ENV: 'production' }
回答by John Papa
This worked for me
这对我有用
var spawn = require('child_process').spawn;
var productionEnv = Object.create(process.env);
productionEnv.NODE_ENV = 'production';
var start = spawn('node', ['app.js'], {env: productionEnv});
this did not
这没有
var spawn = require('child_process').spawn;
var start = spawn('node', ['app.js'], {env: {NODE_ENV: 'production'}});
回答by Augustine
add shell option worked for me
添加外壳选项对我有用
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);
});
});

