Gruntタスクで環境変数を定義する(grunt-env)

Node.jsで開発しているプロジェクトでGruntを利用しているときに、タスクによって環境変数を定義したい場合、grunt-envを利用すると便利ですよ。という話。

npmでgrunt-envをインストール。

$ npm install grunt-env --save

次にGruntfile.jsを編集します。以下の様な具合。

module.exports = function(grunt) {
  grunt.loadNpmTasks('grunt-env');  // grunt-env追加

  grunt.initConfig({
    env: {
      dev: {
        NODE_ENV : 'development'
      },
      production: {
        NODE_ENV : 'production'
      }
    }
  });

上の様に定義した上で、例えば既に、serverというタスクにコンパイル及びNode.jsの起動のタスクが登録されていた場合、それらのタスクの前に env:dev というタスクを加えると

NODE_ENV=development

という環境変数を定義した上でコンパイルとNode.jsの起動が行われます。具体的には以下の様な形でregisterTaskの修正を行います。

// 'env:dev' を追加
grunt.registerTask('server', ['env:dev', 'compile', 'runNode']);

こうすることで、gruntでタスクを実行するだけで、process.env.NODE_ENV で参照できる環境変数が定義されます。

grunt-env とても便利。