黑人生命也是命

常見問題

如何安裝 grunt?

有關一般安裝說明,請閱讀 入門 指南。如果您在閱讀後需要更具體的資訊,請閱讀全面的 安裝 grunt 指南。

我什麼時候可以使用開發中功能「X」?

安裝 grunt 指南中介紹了如何安裝已發布和未發布的 Grunt 開發版本。

Grunt 能在 Windows 上執行嗎?

Grunt 可以在 Windows 上正常執行,因為 Node.jsnpm 都可以在 Windows 上正常執行。通常有問題的部分是 Cygwin,因為它會綑綁舊版本的 Node.js。

避免這個問題的最佳方法是使用 msysGit 安裝程式 安裝 git 二進位檔,以及使用 Node.js 安裝程式 安裝 nodenpm 二進位檔,並使用內建的 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:001bar:001baz: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.jsonnode_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 $*