I don't want type the extra arguments NODE_ENV='production' gulp every time I run gulp to set an environment variable.

I would rather set the environment variable from within gulp via a task.

What would be a good way to achieve this?

1

5 Answers

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

Use it like:

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

You can also define it as a script in your package.json

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

And run it with npm run gulp-build. This has a few benefits

  • You can define arguments easily instead of typing them every time
  • Global gulp installation isn't required (same for other tools, like webpack)
  • You can define multiple variants with different environment variables and(or) arguments without changing the gulpfile (as you can see above - gulp and gulp-build for development and production respectively)
1

Try gulp-env

Quick example on how to set some environment variables before running the nodemon task:

// 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']) 
2

You can Setup the environment like follows:

// Environment Setup var env = process.env.NODE_ENV || 'development'; 

Then you can use the environment to process the code as follows:

gulp.task('js',function(){ gulp.src(jsPath) .pipe(browserify({debug: env === 'development'})) .pipe(gulpif(env === 'production' , uglify())) .pipe(gulp.dest(jsDest)); }); 

You can also set one by default, and read the variables from a json file:

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

This would be always dev env by default, and you could call it setting another env, like this:

gulp --env prod

More of gulp-env

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy