2015-02-28 5 views
49

Non voglio digitare gli argomenti extra NODE_ENV='production' gulp ogni volta che eseguo gulp per impostare una variabile di ambiente.Come posso impostare una variabile di ambiente come attività gulp?

Preferirei impostare la variabile di ambiente dall'interno di gulp tramite un'attività.

Quale sarebbe un buon modo per raggiungere questo obiettivo?

+2

usare 'yargs' e' gulp-persistnt' per generare i file aventi 'env' basato su argomenti della riga di comando passati – harishr

risposta

110
gulp.task('set-dev-node-env', function() { 
    return process.env.NODE_ENV = 'development'; 
}); 

gulp.task('set-prod-node-env', function() { 
    return process.env.NODE_ENV = 'production'; 
}); 

utilizzarlo come:

gulp.task('build_for_prod', ['set-prod-node-env'], function() { 
    // maybe here manipulate config object 
    config.paths.src.scripts = config.paths.deploy.scripts; 
    runSequence(
     'build', 
     's3' 
    ); 
}); 
+9

Risposta corretta che mostra come eseguire un'attività semplice senza dipendenze eccessive –

+0

funziona ancora? Sono su osx dove non lo fa :( – wegginho

+0

@wegginho si, qual è il tuo codice? –

16

Prova gulp-env

esempio rapida su come impostare alcune variabili d'ambiente prima di eseguire il compito nodemon:

// gulpfile.js 

var gulp = require('gulp'); 
var nodemon = require('nodemon'); 
var env = require('gulp-env'); 

gulp.task('nodemon', function() { 
    // nodemon server (just an example task) 
}); 

gulp.task('set-env', function() { 
    env({ 
    vars: { 
     MONGO_URI: "mongodb://localhost:27017/testdb-for-british-eyes-only", 
     PORT: 9001 
    } 
    }) 
}); 

gulp.task('default', ['set-env', 'nodemon']) 
+1

Quando eseguo ciò, viene visualizzato che 'MONGO_URI non è definito' – Dallin

+0

Il modo Node nativo è probabilmente il migliore, come mostrato in altre risposte su questo post. 'return process.env.NODE_ENV = 'production';' – dman

2

È anche possibile impostare uno per impostazione predefinita e leggere le variabili da un file json:

gulp.task('set-env', function() { 
    var envId = gutil.env.env; 
    if (!envId) { 
     envId = "dev"; 
    } 
    genv({ 
     file: "env." + envId + ".json" 
    }); 
}); 

Questo sarebbe sempre dev env di default, e si potrebbe chiamare impostare un altro ENV, in questo modo:

gulp --env prod

Più di gulp-env

6

Si può anche definire come uno script nel tuo package.json

{ 
    "name": "myapp", 
    "scripts": { 
    "gulp": "NODE_ENV='development' gulp", 
    "gulp-build": "NODE_ENV='production' gulp" 
    }, 
    ... 
} 

ed eseguirlo con npm run gulp-build. Questo ha alcuni vantaggi

  • È possibile definire gli argomenti facilmente invece di digitare ogni volta
  • installazione sorso globale non è richiesta (lo stesso per gli altri strumenti, come webpack)
  • È possibile definire più varianti con diverse variabili d'ambiente e (o) argomenti senza modificare il gulpfile (come si può vedere sopra - gulp e gulp-build rispettivamente per lo sviluppo e la produzione)
+0

Ottima risposta. Penso che sia così importante cercare di sfruttare ciò che hai già, prima di introdurre un altro strumento nel mix! – Red2678