web-dev-qa-db-ja.com

グラントテンプレートからプロセス/環境にアクセスする

0.3で動作するgrunt.jsファイルにいくつかのコードがありますが、0.4で中断します。

{
    dest: '<%= process.env.DEST %>/index.html'
}

0.3ではプロセスが定義されているので、テンプレート内の環境で定義された変数にアクセスできます。他のプラグインにファイルパスを渡す。

0.4で機能する代替アプローチはありますか?または、テンプレートのレンダリング中にブレークポイントを挿入して、使用可能な変数を確認する方法はありますか?

22
vitch

デフォルトのデータは設定オブジェクトです 。環境変数を設定オブジェクトに追加するか、直接使用することができます。

grunt.initConfig({
    destination: process.env.DEST,
    task: {
        target: {
            dest: '<%= destination %>/index.html'
        }
    },
});

または

grunt.initConfig({
    task: {
        target: {
            dest: process.env.DEST + '/index.html'
        }
    },
});
53
Sindre Sorhus

これはシンドレの素直な答えです。または、次のようにすることもできます(grunt-envプラグインを使用します: https://npmjs.org/package/grunt-env )-

grunt.initConfig({
    env : {
        test : {
            DEST : 'testDEST'
        },
        dev : {
            DEST : 'devDEST'
        },
        qa : {
            DEST : 'qaDEST'
        },
        prod : {
            DEST : 'prodDEST'
        }
    }

});


grunt.registerTask('setenvs', 'Set environment variables', function() {
    grunt.config('ENVS', process.env);
});

次に使用します

{
    dest: '<%= ENVS.DEST %>/index.html'
}

あなたの仕事は-

    grunt.registerTask('default', [
        'env:dev',
        'setenvs'
        'yourTask'
    ]);

<%= ... %>を使用できるように代替アプローチを提案しました。initConfigでハードコーディングする必要はありません。ユーザーからの入力として受け取り、envに渡すことができるenvのターゲット。

0
Aniket Thakur