下面是一个使用脚手架来初始化项目的典型例子。
随着前端工程化的理念不断深入,越来越多的人选择使用脚手架来从零到一搭建自己的项目。其中大家最熟悉的就是create-react-app和vue-cli,它们可以帮助我们初始化配置、生成项目结构、自动安装依赖,最后我们一行指令即可运行项目开始开发,或者进行项目构建(build)。
这些脚手架提供的都是普遍意义上的最佳实践,但是我在开发中发现,随着业务的不断发展,必然会出现需要针对业务开发的实际情况来进行调整。例如:
通过调整插件与配置实现Webpack打包性能优化后
删除脚手架构建出来的部分功能
项目架构调整
融合公司开发工具
……
总而言之,随着业务发展,我们往往会沉淀出一套更“个性化”的业务方案。这时候我们最直接的做法就是开发出一个该方案的脚手架来,以便今后能复用这些最佳实践与方案。
1.脚手架怎么工作?功能丰富程度不同的脚手架,复杂程度自然也不太一样。但是总体来说,脚手架的工作大体都会包含几个步骤:
初始化,一般在这个时候会进行环境的初始化,做一些前置的检查
用户输入,例如用vue-cli的时候,它会“问”你很多配置选项
生成配置文件
生成项目结构,这是候可能会使用一个项目模版
安装依赖
清理、校验等收尾工作
此外,你还需要处理命令行行为等。往往我们只是想轻量级、快速得创建一个特定场景的脚手架(不用想vue-cli那么完备)。而对于想要快速创建一个脚手架,其实我们不用完全从零开始。Yeoman就是一个可以帮我们快速创建脚手架的工具。
可能很多同学都不太了解,那么先简单介绍一下Yeoman是什么,又是如何帮我们来简化脚手架搭建的。
首先,Yeoman可以简单理解为是一个脚手架的运行框架,它定义了一个脚手架在运行过程中所要经历的各个阶段(例如我们上面说的,可能会先读取用户输入,然后生成项目文件,最后安装依赖),我们所需要的就是在生命周期的对应阶段,填充对应的操作代码即可。而我们填充代码的地方,在Yeoman中叫做generator,物如其名,Yeoman通过调用某个generator即可生成(generate)对应的项目。
如果你还不是特别清楚它们之间的关系,那么可以举个小例子:
将脚手架开发类比为前端组件开发,Yeoman的角色就像是React,是一个框架,尤其是定义了组件的生命周期函数;而generator类似于你写的一个React业务组件,根据React的规则在各个生命周期中填代码即可。
Yeoman内置的“生命周期”方法执行顺序如下:
initializing
prompting
default
writing
conflicts
install
end
其中default阶段会执行你自定义地各种方法。
同时,Yeoman还集成了脚手架开发中常用的各类工具,像是文件操作、模版填充、终端上的用户交互功能,命令行等,并且封装成了简单易用的方法。
通过这两点,Yeoman可以帮我们大大规范与简化脚手架的开发。
2.开发一个自己的脚手架了解了一些脚手架的工作方式与Yeoman的基本概念,咱们就可以来创建一个属于自己的脚手架。作为例子,这个脚手架的功能很简单,它会为我们创建一个最简版的基于Webpack的前端项目。最终脚手架使用效果如下:
2.1.准备一个项目模版脚手架是帮助我们快速生成一套既定的项目架构、文件、配置,而最常见的做法的就是先写好一套项目框架模版,等到脚手架要生成项目时,则将这套模版拷贝到目标目录下。这里其实会有两个小点需要