經過一段漫長時間的等待,yeoman-generator
1.0 終於推出了!
自 2015 年 2 月我們就開始 討論要發行 1.0 版本。Yeoman 自 2012 年就已出現,在這 4 年間,累積了許多技術債務,以及過時的 API。我們一貫堅持重視維持向後相容性,並讓升級到我們核心架構的新版本時能盡可能順利。因此,我們從 2015 年開始發行較小型的重大變更集合,作為 1.0 前的次要版本。
要明確界定我們何時準備接受某 API 達到足夠程度,可作為我們專案的基礎來維護,是一件困難的事。清除無用的、過時的函式讓我們走到一個階段:清楚看到某些意外的核心複雜度。因此,我們在今天發行 1.0,修正這些問題,並移除所有標記為過時的方法。
如果您有持續關注過去的 yeoman-generator
發行版本,我們預期更新程序會相對順利。
變更
此發行版本的兩項重大變更:重新考量和簡化您組成產生器的及處理傳遞至您的產生器的選項和引數的方式。
更新選項和引數剖析
發生許多錯誤集中在產生器系統處理選項和引數的方式。我們相信截至 1.0 為止我們已經修正好其中大多數的錯誤。
對於產生器維護者而言,主要的變更在於引數和選項現在都能以相同的透明方式使用。現在透過 this.options[argumentName]
存取引數,而不是 this[argumentName]
。舊方法會與其他實例名稱發生衝突,因此常常會產生錯誤。
現在應正確遵守 type
屬性。此屬性也可以定義成一個函式,取得字串輸入,並將其剖析成任何您想要的數值。
this.option("bar", {
type: input => _.capitalize(input)
});
更新 composeWith
composeWith
無庸置疑是我們系統中其他部分意外複雜度最高的函式。如先前說明的輸入剖析變更,讓我們得以減少此方法的複雜度。
您先前會將 composeWith 函式寫成
// OLD API
this.composeWith(
"node:eslint",
{
options: {
indent: 2
}
},
{
local: require.resolve("generator-node/generators/eslint")
}
);
現在則只需寫成
this.composeWith(require.resolve("generator-node/generators/eslint"), {
indent: 2
});
更簡單的預設匯出
先前 yeoman-generator
套件會顯示許多無關的函式。
它現在只會匯出核心 Generator
類別
const Generator = require("yeoman-generator");
export default class extends Generator {}
不再有 NamedBase
,也不再有 yeoman-environment
工廠 (直接使用 yeoman-environment
)。
Yarn 支援
我們現在揭示 this.yarnInstall()
(就像 this.npmInstall()
) ,因為等待安裝真的太浪費時間了。
此外,npmInstall
也經過改良,將預設 cache 時間調整為較長。
其他變更
我們已刪除許多不建議使用的函數
this.expand()
this.expandFiles()
this.isPathAbsolute()
this.mkdir()
this.invoke()
this.hookFor()
this.remote()
this.remoteDir()
this.fetch()
this.extract()
this.tarball()
this.welcome()
this.write()
this.read()
this.copy()
this.bulkCopy()
this.template()
this.directory()
this.bulkDirectory()
這些函數都可由原始 npm 模組取代,不需要 Generator 原型函數。
檔案處理應全部透過虛擬檔案系統 this.fs
進行 (/authoring/file-system.html)
移轉指南
如果你一直跟上最新的 yeoman-generator
發行,那麼每次你使用即將要刪除的函數時,你都應該看到過時警告。
如果你沒有跟上我們的發行,我建議升級到 v0.19
,並逐漸升級到 1.0,因為你在升級到每個版本時都會收到未來的過時警告。修正警告並升級到下一個次要版本,直到你升級到 1.0 為止。
始終歡迎你在 我們的 Gitter 聊天室 中發表意見,以取得支援,如果你遇到問題。錯誤可回報到 yeoman-generator 存放庫。
我們希望這個版本能協助你製作更好、更有效的產生器!