Yeoman Generator 开发

2019/07/25 yeomangenerator

# Yeoman 是干什么的?

Yeoman 是一个脚手架生成工具,负责生成一个项目的基本解构,能够节省重复劳动,提升开发体验。

# 开发

Yeoman 为我们提供了 Generator 的基类,于是:

const generators = require("yeoman-generator");

module.exports = generators.Base.extend({
    constructor: function () {
        generators.Base.apply(this, arguments)
        // your logic
    }
})

生命周期

一个 Yeoman Generator 被创建后(构造函数必然是最先被调用的),会依次调用它原型上的方法,且每一个方法中的 this 都被绑定为 Generator 实例本身,调用的顺序如下:

  1. initializing:初始化一些状态之类的,通常是和用户输入的 options 或者 arguments 打交道,这个后面说

  2. prompting:和用户交互的时候(命令行问答之类的)调用

  3. configuring:保存配置文件(如 .babelrc 等)

  4. default:其他方法都会在这里按顺序统一调用

  5. writing:在这里写一些模板文件

  6. conflicts:处理文件冲突,比如当前目录下已经有了同名文件

  7. install:开始安装依赖

  8. end:擦屁股的部分... Say Goodbye maybe...

上面只是调用顺序,后面的说明是建议,也就是说你完全可以在 install 的部分写文件,在 configuring 的时候就开始安装依赖,不过这样的话,就不保证行为的正确性了,更不要说维护上的问题了,所以,别这样,按照它的强制范式来吧。

这些运行周期方法,除了可以是函数外,还可以是对象,我以 babelsub-generator 为例子:

writing: {
    files: function () {
        // 写 `.babelrc` 文件
    },
    pkg: function () {
        // 给 package.json 文件上添加依赖项
    }
}

对象里的每一个函数会被依次执行。是写成一个函数,还是分成多个函数写成一个对象,都可以,我个人倾向于后者。

# 参考资料

上次更新: 2021/8/7 上午3:33:06