原理解析:如何实现自己的脚手架工具?

开发 前端
比如写一个网站,最开始都是从零开始的,后面再写一个相同类型的网站时,就可以将之前的代码直接复制过来了。如果将可以复制的这些内容抽离出来,每次开发新东西,都能自动生成就好了。

[[400794]]

脚手架工具

什么是脚手架工具?工程化中,最重要的就是脚手架工具了,什么是脚手架工具呢?生活中其实很常见:

[[400795]]

比如写一个网站,最开始都是从零开始的,后面再写一个相同类型的网站时,就可以将之前的代码直接复制过来了。如果将可以复制的这些内容抽离出来,每次开发新东西,都能自动生成就好了。

再举个例子,之前我们家包饺子,都是自己擀皮,后来发现楼下超市有买饺子皮的,饺子皮就是个半成品,脚手架工具就是做这些半成品的。

我们的项目中,会有各种文件夹及文件,脚手架就可以一键生成:

脚手架的作用:创建项目基础结构、提供项目规范和约定。

前端的脚手架工具,分为两类,通用型和专用型。

通用型脚手架工具 Yeoman

Yeoman 的基本概念:The web's scaffolding tool for modern webapps,即用于现代化 web 应用程序的脚手架工具。

[[400796]]

Yeoman 是一款脚手架工具,可以帮助开发人员创建项目的基础结构代码。yo 是 Yeoman 的命令行管理工具,可以在命令行运行 yeoman 的命令。

generator 生成器则是 Yeoman 中具体的脚手架。针对不同的项目,例如网站、APP、小程序等,有不同的脚手架生成器。

Yeoman 使用说明及使用步骤:

  • 全局安装 yo:npm install -g yo
  • 安装 generator,不同的 generator 可以生成不同的项目:
  1. npm install -g generator-webapp  ||  npm install -g generator-node 
  • 通过 yo 运行 generator:yo webapp || yo node
  • 启动应用:npm run start

使用步骤:

1:明确你的需求;

2:找到合适的 Generator;

3:全局范围安装找到的 Generator;

4:通过 Yo 运行对应的 Generator;

5:通过命令行交互填写选项;

6:生成你所需要的项目结构;

自定义 Generator

基本使用

一个 Generator 就对应了一个类型的项目,我们可以通过自定义的 Generator 实现一个自己的脚手架工具,高度定制适合自己的脚手架工具。

创建 Generator 实际上就是创建一个 NPM 模块, Generator 基本结构:

如果想生成多个,只需要创建对应的目录及文件即可。

还有一点需要注意, Generator 的名字必须是 generator-的形式。

创建一个文件夹,然后初始化项目 npm init -y

安装 Generator 基类,基类提供了很多工具函数,让我们方便地完成定制化

npm install yeoman-generator

然后按照目录要求,创建 generator-sample\generators\app\index.js 文件。

注意文件夹及文件名不要写错:generator-xxx\generators\xxxx\index.js

index.js:

最后使用 npm link 命令,将 generator-sample 挂载为全局命令。如果出现意外,可以使用 npm config get prefix 命令查找 npm 全局目录,然后查看 generator-sample 是否存在,确认全局命令创建成功后,就可以使用 yo sample 命令在新的目录中生成文件内容。

生成的内容是我们手动创建的,不够灵活。

使用模板创建文件

创建 generators\app\templates\foo.txt 目录及文件。这是一个模板文件,内部可以使用 EJS(https://ejs.bootcss.com/) 模板标记输出数据。

例如:<%= title%>

其他的EJS语法也支持,如:

<% if (success) { %>

西岭老湿

<% }%>

写好模板文件之后,我们就可以使用模板的方式生成文件内容了。

相对于手动创建每一个文件,模板的方式大大提高了效率,特别是在文件较多且复杂的情况下

命令行交互

创建模板 \app\templates\index.html

创建 Vue 脚手架

和之前一样,我们创建好一个 generator-xiling-vue 的项目目录,使用命令 npm install yeoman-generator 安装基类,在入口文件中完成命令行交互和文件写入的相关内容。

因为我们需要使用模板的方式写入文件内容,所以需要创建模板文件。这里就不再手动写了,直接使用已经创建好的进行修改使用。直接复制现有 Vue 的空项目代码,到 templates 中。

然后修改名称部分,在 generator-xiling-vue\generators\app\templates\public\index.html 文件中,如果不需要替换转义,使用两个 %% 进行屏蔽,重写时就会跳过。

修改好模板后,就可以写入文件内容了,回到 generator-xiling-vue\generators\app\index.js 入口文件中,将模板中的相对路径及文件名存入数组,然后使用十足遍历的方式写文件内容,代码如下:

最后,依然使用 npm link 挂载一个全局命令行,然后在此创建一个新的项目目录,在目录的命令行中执行 yo xiling-vue 就可以创建一个 Vue 项目。

如果想让更多的功能加入到脚手架中,我们只需要按照这个逻辑添加内容或者模板文件就可以了,一个自定义的 Vue 脚手架就已经创建完成了。

脚手架的工作原理

脚手架的工作流程:通过命令行工具启动一个程序,在命令行交互中,获取用户输入,然后创建对应的代码文件。

接下来我们通过更加原始的方式,创建一个极简的脚手架工具,来体会脚手架的工作原理。

首先我们创建一个项目文件夹 mycli ,然后执行命令 npm init -y 初始化项目;

然后执行命令 npm install ejs inquirer 安装两个插件,ejs 是模板语法插件,inquirer 是命令行交互插件。

然后在 \mycli\package.json 文件中添加代码"bin": "cli.js",用于指定脚本的入口文件。

因为是脚本命令代码,因此在 cjs 入口文件中,需要添加首行文件头。

脚手架的工作过程:

1. 通过命令行交互询问用户问题

2. 根据用户回答的结果生成文件

了解了工作流程后,先准备模板文件,然后再按照流程进行代码的实现。

创建模板文件代码

脚手架逻辑实现

完成后,在项目目录下执行 npm link 挂载全局命令,然后就可以使用 mycli 这个命令,创建项目文件了。卸载命令行可以使用 npm unlink。

 

责任编辑:姜华 来源: 勾勾的前端世界
相关推荐

2023-11-21 17:36:04

OpenFeignSentinel

2021-01-07 05:34:07

脚手架JDK缓存

2018-08-30 16:08:37

Node.js脚手架工具

2018-06-11 14:39:57

前端脚手架工具node.js

2021-11-08 09:35:09

Vue代码前端

2009-09-16 15:05:58

CakePHP脚手架

2016-09-07 15:35:06

VueReact脚手架

2021-12-23 10:35:32

SpringCloud脚手架架构

2016-08-10 14:59:41

前端Javascript工具

2020-03-20 08:32:41

物联网脚手架传感器

2022-04-24 11:33:47

代码管理工程

2019-12-25 15:20:48

前端脚手架命令

2014-08-15 09:36:06

2021-05-13 17:02:38

MDC脚手架日志

2024-03-11 13:18:00

RustClap项目

2021-04-28 16:10:48

开发脚手架 Spring

2020-06-29 11:35:02

Spring BootJava脚手架

2022-01-14 14:09:11

脚手架代码自定义

2023-02-15 18:12:43

开发企业级CLI

2017-07-21 09:56:46

Webpack3 Vue.js脚手架
点赞
收藏

51CTO技术栈公众号