http://gruntjs.com/を使用して、ファイルを反復処理するビルド スクリプトを作成していthemes.json
ます。JSON インクルードは次のようになります。
{
"vintage" : {
"_name" : "vintage",
"_long_name" : "Vintage",
"_js_includes" : [
"assets/js/plugins/bootstrap/bootstrap-transition.js",
[...]
"assets/js/plugins/*.js",
"assets/js/_*.js"
]
},
"pure" : {
"_name" : "pure",
"_long_name" : "Pure",
"_js_includes" : [
"assets/js/plugins/bootstrap/bootstrap-transition.js",
[...]
"assets/js/plugins/bootstrap/bootstrap-popover.js",
"assets/js/plugins/*.js",
"assets/js/_*.js"
]
}, "mystique" : {
"_name" : "mystique",
"_long_name" : "Mystique",
"_js_includes" : [
[...]
"assets/js/plugins/*.js",
"assets/js/_*.js"
]
}
}
このファイルgrunt.initConfig
を
grunt.initConfig({
themes: '<json:themes.json>',
[...]
メソッド、問題はmystique
、上記の例の配列の最後のテーマが、私が書こうとしているテーマ固有のタスクを何らかの形でオーバーライドしていることです。ここにリンクされているコードのこの行で、ループgrunt themes:pure
内で動的に登録しているアクションを実行して取得できるようにしたい:for
for ( var new_key in themesObject ) {
とにかく動作しない関連ビットは次のとおりです。
for ( var key in themesObject ) {
initCommand = 'themes:'+themesObject[thisThemeName]._name; // --> themes:pure
taskString = themesObject[thisThemeName].taskString // --> lint pure:recess pure:concat pure:min pure:mincss pure:enqueue_ver
grunt.task.registerMultiTask( initCommand, taskString, function() {
grunt.log.writeln('Now executing task ['+this.target+'] for '+this.name+' theme...');
grunt.log.writeln( grunt.log.writeflags( this.data, this.target ) );
grunt.log.writeln( 'this.file = '+this.file);
})
上記のコードは、initConfig
正しいように見え、themes:[my-theme]
実行が実行されているようにテンプレートをログに記録しますが、実際のコマンドの実行は行われず、ログの側面のみが発生します。
関数に taskString を渡し、registerMultiTask
関数自体の中でタスク文字列を繰り返す必要がありますか?
registerMultiTask( initCommand, taskString, function( taskString ) { taskString })
関数を作成してから、grunt.task.run(taskString)
登録された各関数内で実行しますか? この変数を渡す方法は、コマンド ライン入力を受け取ることを目的としていることは理解していますが、登録された関数に文字列を渡す方法はありますか?
JSON構成オブジェクトの最上位を実行しているが、実行が行われるべきであるより深くネストされたJSONに再帰していないという意味で、すべてを「フラット」に実行しているようです...私はここにいますか?
好奇心が強い人のために、これはいくつかの変更を加えた Twitter Bootstrap です。基本的に、ここでの目標は、子テーマを動的に作成themes.json
し、兄弟のディレクトリにエクスポートして、面倒なタスクとすべてが存在するソースにエクスポートすることです...次のようにする必要があります。
|source-directory
|--assets
|--|--css
|--|--|--bootstrap
|--|--|--|--less
|--|--scripts
|--|--|--plugins
|pure
|--assets
|--|--css
|--|--|--main.js
|--|--|--main.min.js
|--|--js
|--|--|--scripts.js
|--|--|--scripts.min.js
| vintage
|--assets
|--|--css
|--|--|--main.js
|--|--|--main.min.js
|--|--js
|--|--|--scripts.js
|--|--|--scripts.min.js
... etc.
initConfig
私が意図している方法でループで空白を埋めるためにどういうわけかうなり声を動的に定義させないというこっそり疑いがありfor
ます...これに光を当てることは大歓迎です!
更新themes
:最初に質問を投稿して以来、内部の動的割り当てがinitConfig
期待どおりに機能するようになりましたが、現在、テンプレートは必要なものをエコーしていますが、タスク自体は実行されていません。私はそれぞれに結果を記録していますmultiTask
(ここのコードを参照 - http://jsfiddle.net/6XKrp/2/this.data
)、 (テーマに固有のコマンド->テンプレート)の期待される結果を取得していますが、アクションは定義されています実行していません。
更新 2 : 物事は期待どおりにログに記録され、タスクは現在登録されています。問題は、それらが実行されていないか、JSON オブジェクトのより深いレベルまで再帰的に実行されていないことです。理由はわかりませgrunt.js
ん...実行されませんこの方法で呼び出されたときに再帰的に?