Передать переменную среды из grunt в файл - PullRequest
0 голосов
/ 17 сентября 2018

В зависимости от среды, я хочу запускать HTTP-запросы в js-файле к URL-адресу или другому.

Например, у меня есть что-то вроде этого:

Я хочу выполнить файл grunt и указать env, поэтому js-файл должен прочитать опцию и выполнить запросы к URL-адресу или другому.

Например:

grunt default --env=prod

Как мне сказать файлу js, что URL - это dev, preprd или prod?

1 Ответ

0 голосов
/ 17 сентября 2018

API Node.js предоставляет объект process, который хранит переменные среды внутри своего свойства env.Каждая переменная среды, установленная перед временем выполнения, будет внутри process.env.

Например:

$ NODE_ENV=production node -e 'console.log(process.env.NODE_ENV)'

будет выводить:

production

В вашем конкретном случае вы можетеиспользуйте process.env внутри вашего Gruntfile.js, а затем, при запуске grunt, вы можете использовать его, как в примере выше.

Образец Gruntfile.js с переменными среды

Адаптировано из Grunt.js веб-сайт

module.exports = function(grunt) {

  grunt.initConfig({
    jshint: {
      files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],
      options: {
        globals: {
          jQuery: true
        }
      }
    },
    watch: {
      files: ['<%= jshint.files %>'],
      tasks: process.env.PRODUCTION ? [] : ['jshint']
    }
  });

  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-watch');

  grunt.registerTask('default', ['jshint']);
};

Затем, если вы запустите

$ grunt watch # PRODUCTION environment variable is not set

, он выполнит задачу jshint при просмотре files.С другой стороны, если вы установите переменную PRODUCTION и выполните ту же команду

$ PRODUCTION=true grunt watch

, при просмотре files.

она не будет выполнять никаких задач.
...