nodejs node entorno node.js

node.js - entorno - usando la función spawn con NODE_ENV=producción



stdout on (4)

Esto funciono para mi

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

esto no

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

Actualmente estoy tratando de ejecutar el proceso utilizando spawn . Lo que estoy tratando de ejecutar desde shell es lo siguiente;

NODE_ENV=production node app/app.js

Aquí está el código para ejecutar eso;

var spawn = require(''child_process'').spawn; var start = spawn(''NODE_ENV=production'',[''node'',''app/app.js'']);

Sin embargo, tengo el siguiente 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)

¿Cómo puedo hacer eso usando spawn ?


Sintaxis: spawn (comando, [args], [opciones])

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

O mantener las variables de ENV por defecto:

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

Mi prueba:

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

desde la terminal:

node spawn

salida:

{ NODE_ENV: ''production'' }


agregar la opción de shell funcionó para mí

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


Su uso de engendro no es correcto :

spawn( command, args, options ) :

Inicia un nuevo proceso con el comando dado, con argumentos de línea de comando en args. Si se omite, args toma como valor predeterminado una matriz vacía.

El tercer argumento se usa para especificar opciones adicionales, que de manera predeterminada son:

{cwd: undefined, env: process.env}

Utilice env para especificar variables de entorno que serán visibles para el nuevo proceso, el valor predeterminado es process.env.

Por lo tanto, la variable env NODE_ENV debe proporcionarse en el argumento de las opciones :

// clone the actual env vars to avoid overrides var env = Object.create( process.env ); env.NODE_ENV = ''test''; spawn( ''node'', [''app.js''], { env: env } );

Consulte también ¿Cómo depuro "Error: spawn ENOENT" en node.js?