鍍金池/ 教程/ 物聯(lián)網(wǎng)/ 常見問題
深入任務(wù)內(nèi)幕
grunt.option
退出碼
創(chuàng)建插件
grunt.file
grunt
快速入門
項目腳手架
使用命令行工具
Gruntfile 實例
配置任務(wù)
創(chuàng)建任務(wù)
grunt.log
安裝Grunt
grunt.util
grunt.event
常見問題
grunt.config
grunt.task
grunt.template
grunt.fail

常見問題

如何安裝Grunt?

對于一般安裝說明,請閱讀新手入門指南。如果你在閱完讀新手入門指南之后想要了解更多具體的信息,請閱讀詳細(xì)的安裝Grunt指南。

我什么時候能夠使用開發(fā)中的某個特性?

依據(jù)安裝Grunt指南中的說明可以了解如何安裝發(fā)布的和未發(fā)布的開發(fā)版本的Grunt(對于插件,你也可以使用npm安裝并添加到依賴中使用;對于新的特性可以查閱相關(guān)說明安裝使用)。

Grunt能在Windows上工作嗎?

Grunt可以很好的工作在Windows平臺,因為Node.jsnpm在Windows上都工作得很好(Grunt是基于Node.js的,因而是能夠跨平臺工作,對于特定平臺不支持的特性一般都會有相關(guān)說明或者有兼容性的選擇來支持)。通常情況下問題在于Cygwin,因為它捆綁了一個過時版本的Node.js。

避免這個問題最好的方式是使用msysGit安裝器安裝二進制的git,然后使用Node.js安裝器安裝二進制的nodenpm,并且使用內(nèi)置的Window命令提示符或者PowerShell替代Cygwin(或者說我們首可以先安裝好Git環(huán)境,然后將托管在Github上的Grunt庫克隆到本地來安裝使用Grunt,在工具方面Windows對Node.js的支持或許有欠缺,但是在對Node.js本身的支持上已經(jīng)做得很好了)。

為什么我的異步任務(wù)不能完成?

如果發(fā)生這種情況可能是由于你忘記調(diào)用this.async方法來告訴Grunt,你的任務(wù)是異步的。為了簡單起見,Grunt使用了同步編碼的風(fēng)格,可以通過在任務(wù)體內(nèi)調(diào)用this.async()方法將該任務(wù)轉(zhuǎn)換為異步任務(wù)。

注意,可以傳遞falsedone()函數(shù)來告訴Grunt該任務(wù)失敗。

例子:

grunt.registerTask('asyncme', 'My asynchronous task.', function() {
    var done = this.async();
    doSomethingAsync(done);
});

如何啟用tab命令來自動補全?

添加下面的代碼到你的~/.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ù)共享。

"動態(tài)"別名任務(wù)

這是在多任務(wù)間共享參數(shù)的首選方法。

別名任務(wù)是非常簡單的,一個常規(guī)的任務(wù)可以使用grunt.task.run方法讓它編程一個有效的"動態(tài)的"別名任務(wù)函數(shù)。在下面的例子中,在命令行運行grunt build:001的結(jié)果就是執(zhí)行foo:001,bar:001baz: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);
});

-- options

另一種跨多任務(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);
});

Grunt 0.3相關(guān)問題

在Windows的Grunt 0.3中, 為什么當(dāng)我嘗試運行g(shù)runt時會打開我的JS編輯器

如果你在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 $*