如何将环境变量设置为 gulp 任务?

How can I set an environment variable as gulp task?

我不想每次 运行 gulp 设置环境变量时都输入额外的参数 NODE_ENV='production' gulp

我宁愿通过任务在gulp中设置环境变量

实现此目标的好方法是什么?

尝试gulp-env

关于如何在 运行 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'])
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';
});

像这样使用它:

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

你也可以默认设置一个,然后从json文件中读取变量:

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

默认情况下,这始终是 dev 环境,您可以调用它来设置另一个环境,如下所示:

gulp --env prod

更多 gulp-env

您也可以在 package.json

中将其定义为脚本
{
  "name": "myapp",
  "scripts": {
    "gulp": "NODE_ENV='development' gulp",
    "gulp-build": "NODE_ENV='production' gulp"
  },
  ...
}

和运行它与npm run gulp-build。这有一些好处

  • 您可以轻松定义参数,而不必每次都输入它们
  • 不需要全局 gulp 安装(其他工具也一样,比如 webpack)
  • 您可以使用不同的环境变量和(或)参数定义多个变体,而无需更改 gulp 文件(正如您在上面看到的 - gulp 和 gulp-build for development和生产)

您可以按如下方式设置环境:

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

然后就可以使用环境对代码进行如下处理:

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