黑人生命也是命

從 0.3 升級到 0.4

請注意,即使您熟悉 grunt,也值得閱讀新的 入門 指南。

Grunt 現在分成三個部分:gruntgrunt-cligrunt-init

  1. npm 模組 grunt 應該安裝在您的專案中。它包含執行任務、載入外掛等的程式碼和邏輯。
  2. npm 模組 grunt-cli 應該安裝為全域性。它將 grunt 指令放入您的 PATH 中,讓您可以在任何地方執行它。它本身沒有任何作用;它的工作是載入並執行已安裝在您專案中的 Grunt,與版本無關。有關此變更原因的詳細資訊,請閱讀 npm 1.0:全域性與區域性安裝
  3. init 任務已拆分為其自己的 npm 模組 grunt-init。它應該使用 npm install -g grunt-init 全域性安裝,並使用 grunt-init 指令執行。在未來幾個月內,Yeoman 將完全取代 grunt-init。有關詳細資訊,請參閱 grunt-init 專案頁面

Grunt 0.3 備註

如果您要從 Grunt 0.3 升級,請務必解除安裝全域性 grunt

npm uninstall -g grunt

請注意,對於 0.3.x,外掛名稱和任務設定選項可能與「Gruntfile」區段中顯示的不同。

此檔案對於 Grunt 的 0.3.x 版本稱為 grunt.js

現有任務和外掛

所有 grunt-contrib-* 系列外掛都已準備好使用 Grunt 0.4。但是,針對 Grunt 0.3 編寫的第三方外掛不太可能在更新之前繼續與 0.4 搭配使用。我們正積極與外掛作者合作,以確保此問題能盡快解決。

即將推出的 Grunt 版本將專注於解耦 Grunt 的架構,以便外掛不受未來更新的影響。

需求

  • Grunt 現在需要 Node.js 版本 >= 0.8.0

Gruntfile

  • 「Gruntfile」已從 grunt.js 變更為 Gruntfile.js
  • 在您的 Gruntfile.coffee 專案 Gruntfile*.coffee 任務檔案中支援 CoffeeScript(自動轉譯為 JS)。

請參閱 入門指南的「Gruntfile」部分,以取得更多資訊。

核心任務現在是 Grunt 外掛

Grunt 0.3 中包含的八個核心任務現在是獨立的 Grunt 外掛。每個都是離散的 npm 模組,必須根據 入門指南的「載入 Grunt 外掛和任務」部分作為外掛安裝。

某些任務名稱和選項已變更。請務必參閱上方連結的每個外掛文件,以取得最新的組態詳細資料。

組態

Grunt 0.4 任務的組態格式已標準化並大幅增強。請參閱 組態任務指南,以及個別外掛文件,以取得更多資訊。

  • 檔案萬用字元 (萬用字元) 模式現在可以取反,以排除符合的檔案。
  • 任務現在支援標準的 options 物件。
  • 任務現在支援標準的 files 物件。

Gruntfile 內指定為組態資料的 <% %> 樣式範本字串會自動展開,請參閱 grunt.template 文件,以取得更多資訊。

指令已移除,但其功能已保留。可以進行下列替換

  • '<config:prop.subprop>''<%= prop.subprop %>'
  • '<json:file.json>'grunt.file.readJSON('file.json')
  • '<file_template:file.js>'grunt.template.process(grunt.file.read('file.js'))

取代在檔案清單中使用 '<banner>''<banner:prop.subprop>' 指定標題,grunt-contrib-concatgrunt-contrib-uglify 外掛各有一個 banner 選項。

取代使用 '<file_strip_banner:file.js>' 個別移除檔案中的標題,grunt-contrib-concatgrunt-contrib-uglify 外掛各有一個選項來移除/保留標題。

別名任務變更

指定別名任務時,現在必須將要執行的任務清單指定為陣列。

// v0.3.x (old format)
grunt.registerTask('default', 'jshint nodeunit concat');
// v0.4.x (new format)
grunt.registerTask('default', ['jshint', 'nodeunit', 'concat']);

任務引數現在可以包含空格

上述別名任務變更(任務清單必須指定為陣列)讓這成為可能。只要在命令列上指定包含空格的任務引數時加上引號,就能正確地解析。

grunt my-task:argument-without-spaces "other-task:argument with spaces"

字元編碼

加入 file.defaultEncoding 方法來標準化字元編碼,且所有 grunt.file 方法都已更新,支援指定的編碼。

輔助程式

Grunt 的輔助程式系統已移除,改用 node require。有關如何在 Grunt 外掛之間共用功能的簡潔範例,請參閱 grunt-lib-legacyhelpers。建議外掛作者升級其外掛。

API

Grunt API 從 0.3 到 0.4 有大幅變更。

工作 / 外掛作者

外掛作者,請在您的儲存庫 README 中清楚標示 Grunt 外掛哪個版本號碼與 Grunt 0.3 不相容。

工作

  • 多重工作
    • 現在可以在 files 物件中為每個目標指定多個 src-dest 檔案對應(此為選用項目)。
  • this.files / grunt.task.current.files
    • this.files 屬性是 src-dest 檔案對應物件的陣列,將在您的多重工作中進行反覆運算。它永遠會是一個陣列,您應該永遠對它進行反覆運算,即使最常見的用例是指定單一檔案。
    • 每個 src-dest 檔案對應物件都有 srcdest 屬性(以及其他屬性,視使用者指定而定)。src 屬性已從使用者可能指定的任何 glob 模式擴充而來。
  • this.filesSrc / grunt.task.current.filesSrc
    • this.filesSrc 屬性是所有指定 src 屬性所配對所有檔案的簡化、唯一化陣列。對於唯讀工作很有用。
  • this.options / grunt.task.current.options
    • this.options 方法可以在工作中用於標準化選項。在工作中,您可以指定選項預設值,例如:var options = this.options({option: 'defaultvalue', ...});

外掛

  • 已為相容於 Grunt 0.4 的外掛建立更新的 gruntplugin 範本,並在獨立的 grunt-init 中提供。

疑難排解

  • 如果您之前已安裝 Grunt 0.4 或任何 grunt-contrib 外掛程式的開發版本,請務必先使用 npm cache clean 清除您的 npm 快取,以確保您拉取 Grunt 和 grunt-contrib 外掛程式的最終版本。