期待已久,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
也得到了改进,默认缓存持续时间更长。
其他更改
我们删除了许多已弃用的函数
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 存储库。
我们希望此版本能够帮助您创建更好、更高效的生成器!