從 0.3 升級到 0.4
請注意,即使您熟悉 grunt,也值得閱讀新的 入門 指南。
Grunt 現在分成三個部分:grunt
、grunt-cli
和 grunt-init
。
- npm 模組
grunt
應該安裝在您的專案中。它包含執行任務、載入外掛等的程式碼和邏輯。 - npm 模組
grunt-cli
應該安裝為全域性。它將grunt
指令放入您的 PATH 中,讓您可以在任何地方執行它。它本身沒有任何作用;它的工作是載入並執行已安裝在您專案中的 Grunt,與版本無關。有關此變更原因的詳細資訊,請閱讀 npm 1.0:全域性與區域性安裝。 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 外掛和任務」部分作為外掛安裝。
- concat → grunt-contrib-concat 外掛
- init → 獨立的 grunt-init 工具程式
- lint → grunt-contrib-jshint 外掛
- min → grunt-contrib-uglify 外掛
- qunit → grunt-contrib-qunit 外掛
- server → grunt-contrib-connect 外掛
- test → grunt-contrib-nodeunit 外掛
- watch → grunt-contrib-watch 外掛
某些任務名稱和選項已變更。請務必參閱上方連結的每個外掛文件,以取得最新的組態詳細資料。
組態
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-concat 和 grunt-contrib-uglify 外掛各有一個 banner
選項。
取代使用 '<file_strip_banner:file.js>'
個別移除檔案中的標題,grunt-contrib-concat 和 grunt-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 有大幅變更。
- grunt
- 移除
grunt.registerHelper
和grunt.renameHelper
方法。
- 移除
- grunt.config
- 變更 config.get 方法,自動遞迴展開
<% %>
範本。 - 加入 config.getRaw 方法,將擷取原始(未展開)設定檔資料。
- 變更 config.process 方法,現在將值處理為從設定檔中擷取,遞迴展開範本。此方法在
config.get
內部呼叫,但不在config.getRaw
內部呼叫。
- 變更 config.get 方法,自動遞迴展開
- 加入 grunt.event,讓任務可以發出事件。
- grunt.fail
- 如果指定
--no-color
選項,不會發出嗶聲。 - 加入
fail.code
退出碼對應表。 - 已移除
fail.warnAlternate
方法。
- 如果指定
- grunt.file
- 任務不再自動從
~/.grunt/tasks/
目錄載入(請將它們安裝到專案的本地端!)。 - 已新增 file.defaultEncoding 方法,用於標準化所有
grunt.file
方法的字元編碼。 - 已新增 file.delete 方法。
- 已新增說明相當清楚的 file.exists、file.isDir、file.isFile、file.isLink、file.isPathCwd、file.isPathInCwd、file.doesPathContain、file.arePathsEquivalent 測試方法。
- 已新增 file.match 和 file.isMatch 方法,用於協助比對檔案路徑與萬用字元模式。
- 已新增 file.expandMapping 方法,用於產生 1 對 1 的 src-dest 檔案對應。
- 已新增 file.readYAML 方法。
- 已變更 file.findup,改用 findup-sync 模組。
- 已變更 file.glob,改用 glob 模組。
- 已新增 file.minimatch,用於公開 minimatch 模組。
- 已移除
file.userDir
方法(已移至 grunt-init)。 - 已移除
file.clearRequireCache
方法。 - 已移除
file.expandFiles
和file.expandDirs
方法,請改用file.expand
的filter
選項。 - 已移除
file.expandFileURLs
方法。請勿指定應指定檔案的 URL(例如,qunit 任務現在允許使用urls
選項)。
- 任務不再自動從
- grunt.task
- 同時使用 task.registerTask 和 task.registerMultiTask 註冊的任務會取得
this.options
方法。 - 已新增 task.normalizeMultiTaskFiles 方法,用於協助將多重任務的
files
物件標準化為this.file
屬性。 - 已移除
task.registerHelper
和task.renameHelper
方法。 - 已移除
task.searchDirs
屬性。 - 已移除
task.expand
task.expandDirs
task.expandFiles
task.getFile
task.readDefaults
方法(已移至 grunt-init)。
- 同時使用 task.registerTask 和 task.registerMultiTask 註冊的任務會取得
- grunt.package 反映儲存在 grunt 的
package.json
中的元資料。 - grunt.version 是 Grunt 的目前版本(字串)。
- grunt.template
- 新增 template.addDelimiters 方法,用於新增範本分隔符。
- 新增 template.setDelimiters 方法,用於選擇範本分隔符。
init
和user
範本分隔符已移除,但您可使用template.addDelimiters
再次新增(grunt-init 使用此方法啟用{% %}
範本分隔符)。
- grunt.util 取代現已移除的
grunt.utils
。- 將
util._
變更為使用 Lo-Dash - 新增 util.callbackify 方法。
- 將 util.spawn 方法變更為行為更佳,並將更一致的引數傳遞至其回呼函式。
- 將
工作 / 外掛作者
外掛作者,請在您的儲存庫 README 中清楚標示 Grunt 外掛哪個版本號碼與 Grunt 0.3 不相容。
工作
- 多重工作
- 現在可以在
files
物件中為每個目標指定多個 src-dest 檔案對應(此為選用項目)。
- 現在可以在
- this.files / grunt.task.current.files
this.files
屬性是 src-dest 檔案對應物件的陣列,將在您的多重工作中進行反覆運算。它永遠會是一個陣列,您應該永遠對它進行反覆運算,即使最常見的用例是指定單一檔案。- 每個 src-dest 檔案對應物件都有
src
和dest
屬性(以及其他屬性,視使用者指定而定)。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 外掛程式的最終版本。