我目前正在尝试使用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']);
Run Code Online (Sandbox Code Playgroud)
但是,我收到了以下错误;
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)
Run Code Online (Sandbox Code Playgroud)
我该怎么做spawn呢?
lac*_*ass 60
您对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 } );
Run Code Online (Sandbox Code Playgroud)
另请参见如何在node.js上调试"错误:生成ENOENT"?
dam*_*hat 11
语法:spawn(command,[args],[options])
var spawn = require('child_process').spawn;
var start = spawn('node', ['app.js'], {env: {NODE_ENV: 'production'}});
Run Code Online (Sandbox Code Playgroud)
或者保留默认的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});
Run Code Online (Sandbox Code Playgroud)
我的测试:
app.js
console.log(process.env);
Run Code Online (Sandbox Code Playgroud)
spawn.js
var spawn = require('child_process').spawn;
var start = spawn('node', ['app.js'], {env: {NODE_ENV: 'production'}});
start.stdout.pipe(process.stdout);
Run Code Online (Sandbox Code Playgroud)
从终端:
node spawn
Run Code Online (Sandbox Code Playgroud)
输出:
{ NODE_ENV: 'production' }
Run Code Online (Sandbox Code Playgroud)
这对我有用
var spawn = require('child_process').spawn;
var productionEnv = Object.create(process.env);
productionEnv.NODE_ENV = 'production';
var start = spawn('node', ['app.js'], {env: productionEnv});
Run Code Online (Sandbox Code Playgroud)
这没有
var spawn = require('child_process').spawn;
var start = spawn('node', ['app.js'], {env: {NODE_ENV: 'production'}});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21482 次 |
| 最近记录: |