常見問題
如何安裝 grunt?
有關一般安裝說明,請閱讀 入門 指南。如果您在閱讀後需要更具體的資訊,請閱讀全面的 安裝 grunt 指南。
我什麼時候可以使用開發中功能「X」?
安裝 grunt 指南中介紹了如何安裝已發布和未發布的 Grunt 開發版本。
Grunt 能在 Windows 上執行嗎?
Grunt 可以在 Windows 上正常執行,因為 Node.js 和 npm 都可以在 Windows 上正常執行。通常有問題的部分是 Cygwin,因為它會綑綁舊版本的 Node.js。
避免這個問題的最佳方法是使用 msysGit 安裝程式 安裝 git
二進位檔,以及使用 Node.js 安裝程式 安裝 node
和 npm
二進位檔,並使用內建的 Windows 命令提示字元 或 PowerShell,而不是 Cygwin。
為什麼我的非同步任務無法完成?
發生這種情況的可能性是,您忘記呼叫 this.async 方法,以告知 Grunt 您的任務是非同步的。為了簡化起見,Grunt 使用同步程式設計風格,可以在任務主體中呼叫 this.async()
來切換為非同步。
請注意,將 false
傳遞給 done()
函式會告知 Grunt 任務已失敗。
例如
grunt.registerTask('asyncme', 'My asynchronous task.', function() {
var done = this.async();
doSomethingAsync(done);
});
如何啟用 shell 標籤自動完成?
若要為 grunt 啟用 bash 標籤自動完成,請將以下程式碼行新增到您的 ~/.bashrc
檔案
eval "$(grunt --completion=bash)"
這假設 Grunt 已使用 npm install -g grunt
全域安裝。目前,唯一支援的 shell 是 bash。
如何跨多個任務分享參數?
雖然每個任務都可以接受自己的參數,但有幾個選項可用於跨多個任務分享參數。
「動態」別名任務
這是跨多個任務分享參數的首選方法。
雖然 別名任務必然簡單,但常規任務可以使用 grunt.task.run 使其有效地作為「動態」別名任務運作。在此範例中,在命令列上執行 grunt build:001
會導致執行 foo:001
、bar:001
和 baz:001
任務。
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);
});
-- 選項
跨多個任務分享參數的另一種方法是使用 grunt.option。在此範例中,在命令列上執行 grunt deploy --target=staging
會導致 grunt.option('target')
傳回 "staging"
。
grunt.registerTask('upload', 'Upload code to specified target.', function() {
var target = grunt.option('target');
// do something useful with target here
});
grunt.registerTask('deploy', ['validate', 'upload']);
請注意,布林選項可以使用僅包含金鑰而沒有值的選項來指定。例如,在命令列上執行 grunt deploy --staging
會導致 grunt.option('staging')
傳回 true
。
全域變數和組態
在其他情況下,您可能想要公開設定組態或全域變數的方法。在這些情況下,請註冊一個將其引數設定為全域變數或組態變數的任務。
在此範例中,在命令列上執行 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
選項查看堆疊追蹤。例如 grunt task --stack
為什麼我收到「已超過最大呼叫堆疊大小」的錯誤訊息?
您可能建立了一個別名工作,其名稱與其中一個常規工作相同。範例:grunt.registerTask('uglify', ['uglify:my_target']);
應為 grunt.registerTask('myUglify', ['uglify:my_target']);
。
如何解除安裝或移除不需要的外掛程式?
至少有兩種方法。一種方法是使用 npm uninstall [GRUNT_PLUGIN] --save-dev
,這將從您的 package.json
和 node_modules
中移除外掛程式。您也可以手動從 package.json
中刪除不需要的相依性,然後執行 npm prune
。
錯誤「無法使用 npm 安裝,錯誤:找不到相容的版本」
請確定您擁有 NPM 和 Node.JS 的最新穩定版本。
grunt 0.3 問題
在 Windows 上使用 Grunt 0.3 時,為什麼我在嘗試執行 grunt 時會開啟我的 JS 編輯器?
如果您在與 Gruntfile 相同的目錄中,則當您輸入 grunt 時,Windows 會嘗試執行該檔案。因此,您需要輸入 grunt.cmd
。
另一種方法是使用 DOSKEY
指令建立 Grunt 巨集,請遵循 這些說明。這將允許您使用 grunt
而不是 grunt.cmd
。
這是您要使用的 DOSKEY
指令
DOSKEY grunt=grunt.cmd $*