Skip to content

杂记

问题

我们在自己开发的时候,为了实现代码规范,我们在每个项目中都需要一些繁琐的配置,包括校验工具、husky commitlint lint-staged vscode 等配置

所以我希望通过创建一个 npm 包,每次只需要安装包然后初始化,就可以完成这一系列配置

心路历程

问题出发

首先我们的项目都是 VUE3 SCSS 技术栈,我在部分项目中完成了整个流程的搭建,现在还剩十几个项目,总不能每个都这么来一下吧,所以我决定创建一个包,每次安装完成后,执行初始化命令即可完成这部分重复工作

确定问题后,开始思考

最初构想

思考我想我要完成的包的功能

画板

安装完成后,通过一个命令,让我的项目装上依赖,以及能够在项目中生成对应的配置文件

运行命令时,能够让开发者在终端自定义选择框架、预编译语言,根据用户的选择安装不同的依赖、生成不同的配置文件

若项目中已经存在对应的配置文件(要知道每个功能对应的配置文件有哪些),能够将项目配置和包配置进行合并

若项目中没有对应的配置文件,则根据包 configs 生成配置文件

基本流程

画板

调研

包 bin 命令的暴露

交互式选择的实现

配置文件生成(直接将设好的配置 copy 到项目根目录)

配置文件合并

文件读取

文件写入

文件 copy

js ast

json

开始 code

javascript
bin;
configs;
scripts;
package.json;

后来的思考

实现初版本后,我发现了一个问题,特别是对于 eslint stylelint ,我感觉根据框架的合并写入实际并不符合我最初的做包的想法,并且对框架而言,核心主要是解析 vue / jsx 这类代码,最终还是要回到 js 上,而且合并等逻辑相对而言复杂,对于一个简单的包来说减了芝麻,丢了西瓜,所以我后来想,我只需要提供一个基础的校验规则,配置文件(eslint stylelint)在项目中创建,去继承这个规则,至于什么框架,什么别的东西,完全由自己写的配置文件解析

最后

我想得到的:

javascript
.husky
.vscode
baseConfig

.eslintrc.cjs   -   extends(baseConfig/.eslint.base.js)
.stylelint.cjs  -   extends(baseConfig/.stylelint.base.js)
.lintstaged
commmitlint.config.js

...配置文件
...忽略的一些配置

完事

得到一个适合我们公司项目用的包

made with ❤️ by ankang