對于一般安裝說明,請閱讀新手入門指南。如果你在閱完讀新手入門指南之后想要了解更多具體的信息,請閱讀詳細(xì)的安裝Grunt指南。
依據(jù)安裝Grunt指南中的說明可以了解如何安裝發(fā)布的和未發(fā)布的開發(fā)版本的Grunt(對于插件,你也可以使用npm安裝并添加到依賴中使用;對于新的特性可以查閱相關(guān)說明安裝使用)。
Grunt可以很好的工作在Windows平臺,因為Node.js和npm在Windows上都工作得很好(Grunt是基于Node.js的,因而是能夠跨平臺工作,對于特定平臺不支持的特性一般都會有相關(guān)說明或者有兼容性的選擇來支持)。通常情況下問題在于Cygwin,因為它捆綁了一個過時版本的Node.js。
避免這個問題最好的方式是使用msysGit安裝器安裝二進制的git
,然后使用Node.js安裝器安裝二進制的node
和npm
,并且使用內(nèi)置的Window命令提示符或者PowerShell替代Cygwin(或者說我們首可以先安裝好Git環(huán)境,然后將托管在Github上的Grunt庫克隆到本地來安裝使用Grunt,在工具方面Windows對Node.js的支持或許有欠缺,但是在對Node.js本身的支持上已經(jīng)做得很好了)。
如果發(fā)生這種情況可能是由于你忘記調(diào)用this.async方法來告訴Grunt,你的任務(wù)是異步的。為了簡單起見,Grunt使用了同步編碼的風(fēng)格,可以通過在任務(wù)體內(nèi)調(diào)用this.async()
方法將該任務(wù)轉(zhuǎn)換為異步任務(wù)。
注意,可以傳遞false
給done()
函數(shù)來告訴Grunt該任務(wù)失敗。
例子:
grunt.registerTask('asyncme', 'My asynchronous task.', function() {
var done = this.async();
doSomethingAsync(done);
});
添加下面的代碼到你的~/.bashrc
文件中來在Grunt中來啟用bash tab自動補全功能:
eval "$(grunt --completion=bash)"
當(dāng)然前提是你已經(jīng)使用npm install -g grunt
在全局范圍內(nèi)安裝好了Grunt。當(dāng)前,自動補全唯一支持的shell腳本是bash。
雖然每個任務(wù)都可以接受它自己的參數(shù),但是這里有幾個選項可以在多個任務(wù)之間進行參數(shù)共享。
這是在多任務(wù)間共享參數(shù)的首選方法。
別名任務(wù)是非常簡單的,一個常規(guī)的任務(wù)可以使用grunt.task.run方法讓它編程一個有效的"動態(tài)的"別名任務(wù)函數(shù)。在下面的例子中,在命令行運行grunt build:001
的結(jié)果就是執(zhí)行foo:001
,bar:001
和baz:001
這三個任務(wù)。
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);
});
另一種跨多任務(wù)共享參數(shù)的方式就是使用grunt.option。在下面的例子中,在命令行中運行grunt deploy --target=staging
將導(dǎo)致grunt.option('target')
返回"staging"
。
grunt.registerTask('upload','Upload code to specified target.', function(n){
var target = grunt.option('target');
//在這里使用target做一些有用的事情
});
grunt.registerTask('deploy', ['validate', 'upload']);
注意布爾類型的選項(options)可以只指定使用一個沒有值的鍵。例如,在命行中運行grunt deploy --staging
將導(dǎo)致grunt.option('staging')
返回true
.
在其他情況下,你可能希望暴露一個設(shè)置配置或者全局的值方法。 在這種情況下,可以在注冊任務(wù)時設(shè)置其參數(shù)作為一個全局對象的或者項目配置的值。
在下面的例子中,在命令行運行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);
});
如果你在Gruntfile所在目錄中(在命令行進入到這個目錄),當(dāng)你輸入grunt時,Windows中會嘗試執(zhí)行該文件(實際上Windows中會嘗試執(zhí)行g(shù)runt.js,因為在0.4.x之前的版本中Gruntfile.js名為grunt.js)。因此你應(yīng)該輸入grunt.cmd
來替代。
另一種方式是使用DOSKEY
命令創(chuàng)建一個Grunt宏, 可以參考也讀這篇文章。這樣就會允許你使用grunt
來替代grunt.cmd
。
下面是你可以使用的DOSKEY
命令:
DOSKEY grunt=grunt.cmd $*