grunt-initで、ひととおりのファイルが全部scaffoldできるのは便利ですが、
そのあとnpm install
もしなくちゃいけないのが、ちょっとかったるいですよね。
そんなわけで、自分はこんなスクリプト書いて、npm installとついでにbower installも、一気にやってくれるようにしてます。
(なお、このスクリプトはasyncに依存してるので、使う前にnpm installしてくださいw)
つかいかた
こいつを、grunt-templateの /lib に置いて、template.jsでこんな感じに書くと、吉です。
(↓だいぶ省略してます。正確なコードはgithubの方みてください)
var shellLines = require('./lib/shellLines');
exports.template = function (grunt, init, done) {
init.process( {}, [
init.prompt('name'),
init.prompt('description')
], function(err, props) {
// write package.json
init.writePackageJSON('package.json', pkg);
// write bower.json
init.writePackageJSON('bower.json', bower);
// npm install & bower install
shellLines([{
command: 'npm install',
message: 'Installing npm dependencies'
},{
command: 'bower install',
message: 'Installing bower dependencies'
}], done);
});
};
最後の部分、今回作った shellLines
という関数に、
実行したいコマンドのリスト、(&その実行中に表示したいメッセージ)
を配列で渡すと、ひとつひとつ実行してくれます。全部終わるとdoneを実行。
ちなみに、init.writePackageJSON
で、bower.jsonも書けちゃうというのも地味にポイントです。
出力
地味にこだわってるのは、出力の形式です。
↑のようなかんじで、他の「Writing …」とかと全くおなじ形式で、
経過を追いつつメッセージが出るようになっています。
まとめ
こんなかんじで、 npm install
や bower install
以外のshellコマンドも、grunt-init内で一気に実行できるようになっているので、
よろしければおためしください。 shellLines
に渡す配列に、設定を足すだけです。
( grunt build
とかをやっちゃうのもいいですね。)
2013/08/26 追記
shellLinesをnpm化しました。
npm install shell_lines
して、↑のサンプルコードと同様に使っていただければ!