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