【问题标题】:How can I set an environment variable as gulp task?如何将环境变量设置为 gulp 任务?
【发布时间】:2015-05-01 11:40:39
【问题描述】:

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

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

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

【问题讨论】:

  • 使用yargs & gulp-constatnt 根据传递的命令行参数生成具有env 的文件

标签: node.js gulp environment-variables


【解决方案1】:

您可以如下设置环境:

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

【讨论】:

    【解决方案2】:

    您也可以在package.json 中将其定义为脚本

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

    并使用npm run gulp-build 运行它。这有一些好处

    • 您可以轻松定义参数,而不是每次都输入它们
    • 不需要全局 gulp 安装(对于其他工具,如 webpack)
    • 您可以在不更改 gulpfile 的情况下使用不同的环境变量和(或)参数定义多个变体(如上所示 - gulp 和 gulp-build 分别用于开发和生产)

    【讨论】:

    • 很好的答案。我认为在引入其他工具之前尝试利用已有的工具非常重要!
    【解决方案3】:
    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'
        );
    });
    

    【讨论】:

    • 正确答案展示了如何在没有过度依赖的情况下完成简单的任务
    • 这还能用吗?我在 osx 上没有 :(
    • 对不起,结果证明是我的逻辑错误。您可以编辑答案,以便我可以将投票更改为向上吗? :) @EliseChant
    • 有人可以解释一下config.paths.src.scripts = config.paths.deploy.scripts; 与检测环境变量有关的行吗?
    • 另一种更简单的方法是 gulp-mode 插件。更多详情,请访问this 帖子。
    【解决方案4】:

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

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

    默认情况下,这始终是 dev env,您可以将其称为设置另一个 env,如下所示:

    gulp --env prod

    更多gulp-env

    【讨论】:

      【解决方案5】:

      试试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'])
      

      【讨论】:

      • 当我运行这个时,我得到MONGO_URI is not defined
      • 本机 Node 方式可能是最好的,如本文其他答案所示。 ` return process.env.NODE_ENV = 'production';`
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 2014-05-01
      • 1970-01-01
      相关资源
      最近更新 更多