如何写一个项目初始化工具(上)

469 阅读2分钟

「这是我参与2022首次更文挑战的第37天,活动详情查看:2022首次更文挑战

遇到的问题

在开发新项目时,我们通常会有两种方式初始化前端项目:

  • 第一种方式:拷一个旧项目,一通乱删,在剩下功能的基础上开发新功能;
  • 第二中方式:从 0 开始搭建新项目,包括配置文件、安装依赖包、路由管理等等;

第一种方式不一定删得干净,让没用的代码留在新项目里。第二种方式操作比较繁琐,如果项目比较多的时候,需要做重复的工作。有没有其它办法呢?下面我们介绍通过 yeoman 来写一个项目初始化工具。

写一个项目初始化工具

今天的主角是 yeoman 官网,yeoman 是 generator 的 generator,可以用来做脚手架。我们借用 yeoman 来写一个初始化工具,用于快速创建项目。

第一步:安装 yeoman

npm install -g yo

第二步:用 npm 初始化一个模块

npm init

注意:这里包名必须是:generator-xxx,xxx 就是 generator 的名称,如果格式不对 yeoman 认不了。

image.png

第三步:在新模块上安装 yeoman-generator 依赖

npm install yeoman-generator

安装成功后 package.json 文件会是这样

{
  "name": "generator-createapp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

第四步:创建目录结构

image.png

修改 package.js 的配置项 "main": "generators/app/index.js"

第五步:编写代码

generators/app/index.js 文件中加入以下代码,代码中的自定义方法 method1method2 会被 yeoman 依次执行,我们的逻辑就可以写在这些方法里。

var Generator = require('yeoman-generator');

module.exports = class extends Generator {
    constructor(args, opts) {
        // Calling the super constructor is important so our generator is correctly set up
        super(args, opts);
    }

    method1() {
        this.log('method 1 just ran');
    }

    method2() {
        this.log('method 2 just ran');
    }
};

第六步:将本地的模块 link 到 npm 标准模块

generator-createapp 是本地模块,如果要使用我们需要先将它 link 到 npm 的标准模块,这里需要用到 npm 的 link 命令。在 generator-createapp 根目录下运行以下命令:

npm link

同一个 generator 只需要 link 一次,后面的代码修改不需要重新 link。

然后可以通过 yo name 命令验证 generator 是否能用:

yo createapp

如果运行正常,命令行显示结果将如下图所示:

image.png

至此我们就完成了简单的 generator 开发工作,但是这个 generator 只能输出两行日志,没有实际功能,下一节我们继续完善它。