親愛的,親愛的,今天我們很高興宣佈發佈 yeoman-generator@0.18.0!
自從我們上一次小版本更新以來,已經過了好幾個月。這個新版本帶來了許多新功能,並且致力於改善組合功能(最初於 0.17 中推出)。
新功能!
儲存提示回答
於提示中使用 {store: true}
屬性,將會在機器全球儲存中儲存使用者回答。這表示使用者下次執行產生器時,預設答案將會填入先前儲存的值。
請仔細注意,提供預設值會阻止使用者回覆空白答案。
非常感謝 @stefanbuck 處理公關 https://github.com/yeoman/generator/pull/688
新的檔案系統
自版本 0.17 以來,Yeoman 檔案系統顯示出其在處理組合性問題上的設計不佳。這就是為什麼我們在 0.18 中推出了經過徹底重新設想的檔案系統抽象。您可以看到在 此問題中進行的討論和設計流程。
所有傳統方法 (this.write
、this.copy
、等) 都已返回移植,以使用這個新系統。因此,更新到 0.18.0 理應神奇地改善您的產生器。
新的 fs
方法
可以在 generator.fs
中存取核心系統。這個物件是 mem-fs-editor 的執行個體,並提供相同的方法。
這個系統比目前的傳統方法簡單得多,而且不執行任何形式的神奇指令。它不會自動編譯範本(請使用 this.fs.copyTpl()
執行此動作),它不會傳遞 this
做為範本背景,而且不會自動假設路徑是相對於任何東西。
範例/常見用法如下
this.fs.copyTpl(
this.templatePath("mocha/base-test.js"),
this.destinationPath("test/index.js"),
{ projectName: "my-awesome-module" }
);
如您所見,我們也新增了兩個新的路徑輔助工具
this.templatePath()
其中:path.join(this.sourceRoot(), ...rest)
this.destinationPath()
其中:path.join(this.destinationRoot(), ...rest)
試用看看,並請提供關於您如何喜歡這個新 API 的回饋。比我們的傳統方法來說,這比較繁瑣,但較為明確且不那麼神奇。
請注意,傳統系統至少會持續提供至 1.0.0 版本
0.17.0 this.src
和 this.dest
檔案工具會怎樣
這些應被視為已棄用。它們所作的設計決策不適合用於組合性,並且長期下來會產生問題。
檔案寫入篩選器
是否曾經希望在每次檔案寫入時套用自訂篩選器?美化檔案、標準化空白等工作現在都可以做。
在每個 Yeoman 程序中,我們將會將每一個修改過的檔案寫入磁碟。這個程序會經過 乙烯基物件串流(就像 gulp)。任何作者都可以註冊 transformStream
來修改檔案路徑或內容。
例如
var beautify = require("gulp-beautify");
this.registerTransformStream(beautify({ indentSize: 2 }));
請注意所有類型的檔案都將通過這資料串流。因此,請確保任何轉換串流都能通過不支援的檔案。類似於 gulp-if 或 gulp-filter 的工具將有助於過濾無效類型並讓它們通過。
這個新功能代表您基本上可以使用任何gulp外掛程式來處理寫入階段時產生的檔案。
改善
- 測試 使用
helpers.run()
時,不會輸出至主控台,以保持測試輸出乾淨。每個記錄方法現在都是sinon.stub()
,使得您很容易聲明您的產生器輸出了正確的內容。 - 測試執行內容現在會自動在唯一的 tmpdir 中執行您的測試。您不必再手動呼叫
helper.run().inDir()
了。 assert.fileContent
和assert.noFileContent
會接受字串作為引數(以前我們只接受正規表示法)- Conflicter 已重新調整,變得更簡單且容易使用。
安裝方法只執行一次
npm
和 bower
安裝輔助工具現在會在每個程序中執行一次。這是 0.17 中所做的變更,但我們已將這項功能擴充至可啟動這些程序的所有用法/方法。
這在 0.17 中是一個打破臨界狀況的作法。但是為了清楚起見,讓我們說清楚。以下建構會中斷
this.installDependencies({
callback: this.async() // This will block the process forever, and node will fail
});
每個安裝方法都將會註冊在 install
執行佇列 上。將 this.async()
作為回呼會造成死結。
修正
- 安裝方法(npm、bower 輔助工具)現在會正確地將選項傳遞至 spawn 程序。
- 目錄發生衝突時,我們不再顯示
diff
選項。(在目錄中選擇 diff 會擲出錯誤) - 您現在可以使用
generator.spawnCommand()
正確地複寫stdio
了。 generator.composeWith()
現在會正確地解析local
選項路徑。
Meta
- 我們已將 yeoman-environment 抽取到自己的儲存庫。這表示這兩個 Yeoman 核心部分現在可以按照自己的步調進化了。
- 我們的測試現在都使用 tmpdir,這讓它們更可靠了。
- 從我們的測試套件中完全移除網路線路連線 - 現在執行速度快很多了。
潛在的中斷變更
- 我們不再在測試中手動模擬 Inquirer。這主要是因為 Inquirer 以我們未仿效的方式來解析值,這造成了太多問題。現在我們更依賴 Inquirer,並且只模擬最低限度。這也表示我們不會在測試期間建立神奇的
errors
屬性。您可以改而傾聽產生器的錯誤。p> - 我們刪除了
require('yeoman-generator').inquirer
。從今以後請自己需要的版本。 - 我們刪除了
generator.shell
和generator.request
。請自己需要的版本。
結論
這項工作尚未完成。我們仍然需要更新一些網站文件,以納入新的 API 方法。我們也需要將我們的核心產生器更新為這個新版本。這些功能應該會很快就會推出,在此同時,請參閱這篇關於新功能的貼文。
因此,請盡情享受這個新版本!請升級並告訴我們 API 的感覺,並且像往常一樣,請隨時回報您遇到的任何錯誤!
謝謝大家