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