2017-12-13 10 views
0

Yeomanで始まる角度のあるプロジェクトでは、grunt serveタスクが定義されるように各環境に必要な定数でjsonファイル(dev、test、dist ...)があります。以下のような:複数の交換可能なファイルからの生成

grunt.registerTask('serve', function(environment) { 
    grunt.task.run([ 
    ... 
    'ngconstant:'+environment, 
    ... 
    ]); 
}); 

、その後ngconstantに、私たちは持っている:

ngconstant: { 
    options: { 
    name: 'environment', 
    dest: ... 
    }, 
    dev: { 
    constants: { 
     'ENV': grunt.file.readJSON('environments/dev.json') 
    } 
    }, 
    test: { 
    constants: { 
     'ENV': grunt.file.readJSON('environments/test.json') 
    } 
    }, 
    ... 
    } 
} 

を、それがgrunt serve:devで実行することができるように、grunt serve:test ...

今、私たちは、第2の基準に応じたアプリケーションの特定の側面を変更する必要が

が、これはngconstantで行うことができます...それは grunt serve:dev:target1grunt serve:test:target2のように構築することができることのように、(のは、ユーザーのターゲットを呼びましょう) ?私が今まで持っていた唯一の類似のアイデアは、 dev-target1dev-target2test-target1 ...のようなターゲットを定義することでした。各セットは ENVを1つのファイルに、 TARGETをもう1つに設定しましたが、スケーラブルではありませんもっと早く来る)、ちょうど普通の醜い。

答えて

0

いいえ、これを行う方法が見つかりました。 Gruntfileでngconstantは:すべてが同じモジュールで一緒にバンドルされているが、serveタスクは、次のように定義されたので

ngconstant: { 
    dev: { 
    options: { 
     name: 'environment', 
     dest: '<%= yeoman.app %>/js/modules/environment/config/environment.js' 
    }, 
    constants: { 
     'ENV': grunt.file.readJSON('environments/dev.json') 
    } 
    }, 
    test: { 
    options: { 
     name: 'environment', 
     dest: '<%= yeoman.app %>/js/modules/environment/config/environment.js' 
    }, 
    constants: { 
     'ENV': grunt.file.readJSON('environments/test.json') 
    } 
    }, 
    prod: { 
    options: { 
     name: 'environment', 
     dest: '<%= yeoman.app %>/js/modules/environment/config/environment.js' 
    }, 
    constants: { 
     'ENV': grunt.file.readJSON('environments/prod.json') 
    } 
    }, 
    local: { 
    options: { 
     name: 'environment', 
     dest: '<%= yeoman.app %>/js/modules/environment/config/environment.js' 
    }, 
    constants: { 
     'ENV': grunt.file.readJSON('environments/local.json') 
    } 
    }, 
    superior: { 
    options: { 
     name: 'target', 
     dest: '<%= yeoman.app %>/js/modules/target/config/target.js' 
    }, 
    constants: { 
     'TGT': grunt.file.readJSON('targets/superior.json') 
    } 
    }, 
    profesional: { 
    options: { 
     name: 'target', 
     dest: '<%= yeoman.app %>/js/modules/target/config/target.js' 
    }, 
    constants: { 
     'TGT': grunt.file.readJSON('targets/profesional.json') 
    } 
    }, 
} 

それは厄介だ:

grunt.registerTask('serve', function(environment, target) { 
grunt.task.run([ 
    ... 
    'ngconstant:'+environment, 
    'ngconstant:'+target, 
    ... 
]); 

});

grunt serve:dev:superiorのようにそれを呼び出すと、最初の「DEV」ENV定数、その後、それぞれのファイルで定義されている「優れた」TGT定数のtarget/config/target.jsファイルとenvironment/config/environment.jsファイルを生成します。

私は両方のタイプで同じ宛先ファイルを設定しようとしましたが、ファイルが上書きされるかわりに定数が追加されたり上書きされたりしました。

関連する問題