杂记
问题
我们在自己开发的时候,为了实现代码规范,我们在每个项目中都需要一些繁琐的配置,包括校验工具、husky commitlint lint-staged vscode 等配置
所以我希望通过创建一个 npm 包,每次只需要安装包然后初始化,就可以完成这一系列配置
心路历程
问题出发
首先我们的项目都是 VUE3 SCSS 技术栈,我在部分项目中完成了整个流程的搭建,现在还剩十几个项目,总不能每个都这么来一下吧,所以我决定创建一个包,每次安装完成后,执行初始化命令即可完成这部分重复工作
确定问题后,开始思考
最初构想
思考我想我要完成的包的功能

安装完成后,通过一个命令,让我的项目装上依赖,以及能够在项目中生成对应的配置文件
运行命令时,能够让开发者在终端自定义选择框架、预编译语言,根据用户的选择安装不同的依赖、生成不同的配置文件
若项目中已经存在对应的配置文件(要知道每个功能对应的配置文件有哪些),能够将项目配置和包配置进行合并
若项目中没有对应的配置文件,则根据包 configs 生成配置文件
基本流程

调研
包 bin 命令的暴露
交互式选择的实现
配置文件生成(直接将设好的配置 copy 到项目根目录)
配置文件合并
文件读取
文件写入
文件 copy
js ast
json
开始 code
bin;
configs;
scripts;
package.json;后来的思考
实现初版本后,我发现了一个问题,特别是对于 eslint stylelint ,我感觉根据框架的合并写入实际并不符合我最初的做包的想法,并且对框架而言,核心主要是解析 vue / jsx 这类代码,最终还是要回到 js 上,而且合并等逻辑相对而言复杂,对于一个简单的包来说减了芝麻,丢了西瓜,所以我后来想,我只需要提供一个基础的校验规则,配置文件(eslint stylelint)在项目中创建,去继承这个规则,至于什么框架,什么别的东西,完全由自己写的配置文件解析
最后
我想得到的:
.husky
.vscode
baseConfig
.eslintrc.cjs - extends(baseConfig/.eslint.base.js)
.stylelint.cjs - extends(baseConfig/.stylelint.base.js)
.lintstaged
commmitlint.config.js
...配置文件
...忽略的一些配置完事
得到一个适合我们公司项目用的包
