2015-02-28 2 views
49

Я не хочу вводить дополнительные аргументы NODE_ENV='production' gulp каждый раз, когда я запускаю gulp для установки переменной окружения.Как установить переменную среды как задачу gulp?

Я предпочел бы установить переменную окружения изнутри gulp через задание.

Что было бы хорошим способом достичь этого?

+2

использовать 'yargs' и' gulp-constatnt' для генерации файлов, имеющих 'env' на основе аргументов командной строки, прошедших – harishr

ответ

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

использовать его как:

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

Правильный ответ, показывающий, как выполнить простую задачу без чрезмерных зависимостей –

+0

все еще работает? Я нахожусь на osx, где это не так :( – wegginho

+0

@wegginho да, какой у вас код? –

16

Попробуйте 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']) 
+1

Когда я запускаю это, я получаю 'MONGO_URI не определен' – Dallin

+0

Нативный способ Node, вероятно, лучший, как показано в других ответах на этот пост. 'return process.env.NODE_ENV = 'production';' – dman

2

Вы также можете установить по умолчанию, и читать переменные из файла 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

6

Вы также можете определить его как сценарий в вашем package.json

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

И запустите его с помощью npm run gulp-build. Это имеет несколько преимуществ

  • Вы можете определить аргументы легко вместо того, чтобы вводить их каждый раз
  • Глобальная установка глотком не требуется (то же самое для других инструментов, как WebPack)
  • Вы можете определить несколько вариантов с различные переменные среды и (или) аргументы без изменения gulpfile (как вы можете видеть выше - gulp и gulp-build для разработки и производства соответственно)
+0

Отличный ответ. Я думаю, что очень важно попытаться использовать то, что у вас уже есть, прежде чем вводить в игру еще один инструмент! – Red2678

Смежные вопросы