Yeoman 生器版本 0.18.0 - 發佈宣告

親愛的,親愛的,今天我們很高興宣佈發佈 yeoman-generator@0.18.0

自從我們上一次小版本更新以來,已經過了好幾個月。這個新版本帶來了許多新功能,並且致力於改善組合功能(最初於 0.17 中推出)。

新功能!

儲存提示回答

於提示中使用 {store: true} 屬性,將會在機器全球儲存中儲存使用者回答。這表示使用者下次執行產生器時,預設答案將會填入先前儲存的值。

請仔細注意,提供預設值會阻止使用者回覆空白答案。

非常感謝 @stefanbuck 處理公關 https://github.com/yeoman/generator/pull/688

新的檔案系統

自版本 0.17 以來,Yeoman 檔案系統顯示出其在處理組合性問題上的設計不佳。這就是為什麼我們在 0.18 中推出了經過徹底重新設想的檔案系統抽象。您可以看到在 此問題中進行的討論和設計流程

所有傳統方法 (this.writethis.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" }
);

如您所見,我們也新增了兩個新的路徑輔助工具

  1. this.templatePath() 其中:path.join(this.sourceRoot(), ...rest)
  2. this.destinationPath() 其中:path.join(this.destinationRoot(), ...rest)

試用看看,並請提供關於您如何喜歡這個新 API 的回饋。比我們的傳統方法來說,這比較繁瑣,但較為明確且不那麼神奇。

請注意,傳統系統至少會持續提供至 1.0.0 版本

0.17.0 this.srcthis.dest 檔案工具會怎樣

這些應被視為已棄用。它們所作的設計決策不適合用於組合性,並且長期下來會產生問題。

檔案寫入篩選器

是否曾經希望在每次檔案寫入時套用自訂篩選器?美化檔案、標準化空白等工作現在都可以做。

在每個 Yeoman 程序中,我們將會將每一個修改過的檔案寫入磁碟。這個程序會經過 乙烯基物件串流(就像 gulp)。任何作者都可以註冊 transformStream 來修改檔案路徑或內容。

例如

var beautify = require("gulp-beautify");
this.registerTransformStream(beautify({ indentSize: 2 }));

請注意所有類型的檔案都將通過這資料串流。因此,請確保任何轉換串流都能通過不支援的檔案。類似於 gulp-ifgulp-filter 的工具將有助於過濾無效類型並讓它們通過。

這個新功能代表您基本上可以使用任何gulp外掛程式來處理寫入階段時產生的檔案。

改善

  • 測試 使用 helpers.run() 時,不會輸出至主控台,以保持測試輸出乾淨。每個記錄方法現在都是 sinon.stub(),使得您很容易聲明您的產生器輸出了正確的內容。
  • 測試執行內容現在會自動在唯一的 tmpdir 中執行您的測試。您不必再手動呼叫 helper.run().inDir() 了。
  • assert.fileContentassert.noFileContent 會接受字串作為引數(以前我們只接受正規表示法)
  • Conflicter 已重新調整,變得更簡單且容易使用。

安裝方法只執行一次

npmbower 安裝輔助工具現在會在每個程序中執行一次。這是 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.shellgenerator.request。請自己需要的版本。

結論

這項工作尚未完成。我們仍然需要更新一些網站文件,以納入新的 API 方法。我們也需要將我們的核心產生器更新為這個新版本。這些功能應該會很快就會推出,在此同時,請參閱這篇關於新功能的貼文。

因此,請盡情享受這個新版本!請升級並告訴我們 API 的感覺,並且像往常一樣,請隨時回報您遇到的任何錯誤!

謝謝大家


查看更多貼文