對于常規(guī)的安裝說明,請閱讀快速入門指南。如果在閱讀完之后你需要更多的詳細(xì)信息,你可以閱讀更詳細(xì)的的安裝 Grunt指南。
在安裝 Grunt指南中介紹了如何安裝已發(fā)布的和未發(fā)布的開發(fā)版本的Grunt。
Grunt可以很好的在windows上工作,因?yàn)?a rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" target="_blank">Node.js和npm都能夠很好的在windows上工作。通常情況下,問題在于Cygwin,因?yàn)樗壷粋€(gè)較老版本的Node.js。
避免這個(gè)問題最好的辦法是使用msysGit installer安裝二進(jìn)制的git
和使用Node.js installer去安裝二進(jìn)制的node
和npm
,然后使用內(nèi)置的Windows command prompt 或 PowerShell 去替代Cygwin。
這是因?yàn)槟阃浾{(diào)用 this.async 方法來告知Grunt你的task是異步執(zhí)行的。為了簡化模型,Grunt采用同步模式的編碼風(fēng)格,你可以通過在任務(wù)中調(diào)用 this.async()
切換到異步模式。
注意,如果task執(zhí)行失敗,可以傳遞 false
給 done()
函數(shù)告知Grunt。
案例:
grunt.registerTask('asyncme', 'My asynchronous task.', function() {
var done = this.async();
doSomethingAsync(done);
});
為了給grunt增加tab鍵自動補(bǔ)功能,可以在你的~/.bashrc
文件中添加下面一行代碼:
eval "$(grunt --completion=bash)"
當(dāng)然,假設(shè)你已經(jīng)使用npm install -g grunt
在全局安裝好了Grunt。因?yàn)镚runt目前僅僅支持bash命令。
雖然每個(gè)任務(wù)可以使用它自己的參數(shù),但是,這里有幾個(gè)方法允許你在多個(gè)task中共享參數(shù)。
這是多個(gè)任務(wù)共享參數(shù)的首選方法
鑒于任務(wù)別名是很簡單的,一個(gè)普通的task可以使用grunt.task.run讓一個(gè)函數(shù)作為“動態(tài)的”任務(wù)別名。在下面這個(gè)案例中,在命令行中執(zhí)行grunt build:001
,最終效果是執(zhí)行foo:001
、bar:001
和 baz:001
這三個(gè)task。
grunt.registerTask('build', 'Run all my build tasks.', function(n) {
if (n == null) {
grunt.warn('Build num must be specified, like build:001.');
}
grunt.task.run('foo:' + n, 'bar:' + n, 'baz:' + n);
});
多個(gè)任務(wù)共享參數(shù)的方式是使用grunt.option。在這里有一個(gè)例子,在命令行中執(zhí)行grunt deploy --target=staging
會讓grunt.option('target')
返回"staging"
。
grunt.registerTask('upload', 'Upload code to specified target.', function(n) {
var target = grunt.option('target');
// do something useful with target here
});
grunt.registerTask('deploy', ['validate', 'upload']);
注意,布爾類型的參數(shù)可以使用一個(gè)沒有值的鍵。例如,在命令行中執(zhí)行grunt deploy --staging
會讓grunt.option('staging')
返回true
。
在其他情況下,你可能希望暴露一個(gè)設(shè)置配置或者全局的值方法。 在這種情況下,可以在注冊任務(wù)時(shí)設(shè)置其參數(shù)作為一個(gè)全局對象的或者項(xiàng)目配置的值。
在下面的例子中,在命令行運(yùn)行grunt set_global:name:peter set_config:target:staging deploy
會導(dǎo)致global.name
的值為"peter"
以及grunt.config('target')
將會返回"staging"
。由此推斷,deploy
任務(wù)就可以使用這些值。
grunt.registerTask('set_global', 'Set a global variable.', function(name, val) {
global[name] = val;
});
grunt.registerTask('set_config', 'Set a config property.', function(name, val) {
grunt.config.set(name, val);
});
使用 --stack
參數(shù)就可以看到調(diào)用棧的追蹤信息了。例如:grunt task --stack
。
你可能是為某個(gè)任務(wù)創(chuàng)建的別名和其他任務(wù)重名了。 例如:grunt.registerTask('uglify', ['uglify:my_target']);
應(yīng)該是grunt.registerTask('myUglify', ['uglify:my_target']);
。
至少有兩種方法。一種方法時(shí)利用 npm uninstall [GRUNT_PLUGIN] --save-dev
指令,這將從package.json
文件和 node_modules
目錄下同時(shí)移除指定的插件。另一種方法時(shí)手工從 package.json
文件中刪除依賴項(xiàng),然后執(zhí)行 npm prune
指令。
請確保安裝了最新穩(wěn)定版本的 NPM 和 Node.JS。
如果你在Gruntfile所在的目錄中時(shí),當(dāng)你輸入grunt時(shí)Windows會嘗試去執(zhí)行那個(gè)文件。因此你需要輸入grunt.cmd
。
另一個(gè)選擇是使用DOSKEY
命令去創(chuàng)建一個(gè)Grunt宏,請參考這篇文章。這樣就可以使用grunt
替代grunt.cmd
了。
可以使用所示如下的DOSKEY
命令:
DOSKEY grunt=grunt.cmd $*
更多建議: