>[success] # 提交前检查
~~~
1.针对代码整体检查可以分为四个阶段:
1.1.编码时检查:编写代码时检查,通常表现为由 IDE 自动实时检查并进行代码提示。
1.2.编码后检查:编写代码后检查,通常表现为手动调用检查脚本 / 工具进行代码的检查
或者代码保存后由 IDE 自动检查当前文件。
1.3.构建前检查:构建执行前检查,通常表现为将代码检查作为构建任务的一个前置切
面,构建时自动触发代码检查。
1.4.提交前检查:git commit 前检查,通常表现为将代码检查作为 git commit 的一个
hooks 任务,代码提交前自动触发代码检查。
'编码时'和'编码后'其实有时候可以看作一体,当你使用了类似vscode 这类工具编码,并安装
了'eslint' 这类插件通过配置便可以在编写时候今天错误提示,当然如果你这些都没有做
就是需要编码后运行'eslint' 检查脚本的指令帮助你发现代码错误
'构建前检查',表现在现在用的 打包工具gulp 以及 webpack 配合
~~~
>[danger] ##### 提交前检查
~~~
1.提交前当我们使用git 等这类工具的时候,在提交的时候做最后一道防护,防止团队
成员提交的代码风格和团队不同
~~~
>[danger] ##### git 提供的钩子
1. `pre-commit`在提交信息**编辑前**运行,在这个阶段塞入**代码检查**流程,检查未通过返回非零值即可停止提交流程;
2. `prepare-commit-msg`在默认信息被创建之后运行,此时正是**启动编辑器前**,可在这个阶段加载`commitizen`之类的辅助填写工具;
3. `commit-msg`在**完成编辑后**运行,可在这个阶段借助`commitlint`进行提交信息规范性检查;
4. `post-commit`在**提交完成后**运行,在这个阶段一般做一些通知操作。
>[info] ## 使用husky
直接去改动`git hook`是不明智因为改动本地的钩子是无法同步到远程仓库的git 钩子上,因此可以使用 `husky`是一个`Git hooks`工具,能够在项目中配置hooks脚本;当我们执行git操作时,自动触发配置的脚本;并且在指定`git hook` 钩子去配置要执行的脚本
>[danger] ##### 在6.0 之前
安装`npm install -D husky` 之后 只需要在package.json 中去配置对应`git hook` 生命周期触发的钩子即可
~~~
{
"husky": {
"hooks": {
"pre-commit": "npm run test", // 在commit之前先执行npm run test命令
"commit-msg": "commitlint -e $HUSKY_GIT_PARAMS" // 校验commit时添加的备注信息是否符合我们要求的规范
}
}
}
~~~
>[danger] ##### 6.0 之后
已经不用在`package.json` 中去生成文件,而是`npm install -D husky`,在执行`npx husky install` 会帮我们创建`.husky` 文件并不会帮助创建`git hook`钩子配置文件,执行`npx husky-init` 会创建`.husky` 文件并帮创建`pre-commit` 钩子但此时钩子执行脚本为`npm test`,想直接一步到位需要使用`npx husky install` 然后执行`npx husky add .husky/pre-commit "npm test"` 其中`npm test` 是触发钩子时候要执行的脚本
1. 安装`npm install -D husky`
2. 执行`npx husky install` 生成`.husky` 文件
3. 指定钩子对应执行脚本`npx husky add .husky/pre-commit "npm test"`
有时候会看见说需要执行`npm set-script prepare "husky install"` 只是 `npm7.x ` 支持的命令,如果你是`7.x` 之前的版本你可以直接在`packgae.json`中添加`prepare`脚本
~~~json
{
"scripts": {
"prepare": "husky install"
}
}
~~~
prepare脚本会在`npm install`(不带参数)之后自动执行。也就是说当我们执行npm install安装完项目依赖后会执行`husky install`命令,该命令会创建.husky/目录并指定该目录为git hooks所在的目录。
>[danger] ##### 6.0 前后的具体改造
[husky使用总结
](https://zhuanlan.zhihu.com/p/366786798)
>[info] ## 使用lint-staged
`lint-staged`是一个对git暂存区代码进行格式化的工具,虽然刚才使用了`husky` 做了`git hook` 钩子触发时会触发的对应脚本配置,但是往往这类脚本是全局的例如`npx husky add .husky/pre-commit "npm run prettier"` 我这里配置是格式化所有文件,其实相对来说往往只需要格式化的是**暂存区** 中的文件即可
~~~
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"prettier": "prettier --write .",
"prepare": "husky install",
"commit": "cz"
},
~~~
1. 安装 `npm install lint-staged --save-dev`
2. 在package.json配置,lint-stagedv10.0.0以后 下面可以不在添加`git add`
~~~
// change 1: 配置lint-staged指令
"scripts": {
// 新增这一行
"lint-staged": "lint-staged",
...
},
// change 2: 配置lint-staged的具体任务
"lint-staged": {
"*.{js,ts,vue,jsx,tsx}": [
"prettier --write",
"eslint --cache --fix",
"git add"
]
},
~~~
3. 相对应的触发钩子配置 `npx husky add .husky/pre-commit 'npm run lint-staged'`
>[danger] 整体流程
>当我们进行一次git提交时 => 触发husky配置的pre-commit钩子 => 执行`npm run lint-staged`命令 => 触发lint-staged对暂存区的文件进行格式化(使用package.json中配置的lint-staged任务) => 使用prettier + eslint 进行格式化
>[info] ## 代码提交规范 -- Commitizen
在提交代码时候希望可以按照规范写好提交信息备注可以使用
1. `npm install commitizen -D`
2. 安装cz-conventional-changelog,并且初始化cz-conventional-changelog`npx commitizen init cz-conventional-changelog --save-dev --save-exact` 执行后会帮我们在package.json中进行配置
~~~
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
}
~~~
`git hook` 钩子中对信息检查的钩子,配置`husky`,`npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'`
暂时不看
>[success] # 备注一下
https://godbasin.github.io/2019/11/10/change-log/
>[info] ## 文章参考
[内容非常详细!领略Eslint代码检查的四种姿势](https://developer.51cto.com/art/202103/650933.htm)
[增加钩子链接](https://juejin.cn/post/7041768022284976165#heading-10)
后续https://zhuanlan.zhihu.com/p/76697446
- 工程化 -- Node
- vscode -- 插件
- vscode -- 代码片段
- 前端学会调试
- 谷歌浏览器调试技巧
- 权限验证
- 包管理工具 -- npm
- 常见的 npm ci 指令
- npm -- npm install安装包
- npm -- package.json
- npm -- 查看包版本信息
- npm - package-lock.json
- npm -- node_modules 层级
- npm -- 依赖包规则
- npm -- install 安装流程
- npx
- npm -- 发布自己的包
- 包管理工具 -- pnpm
- 模拟数据 -- Mock
- 页面渲染
- 渲染分析
- core.js && babel
- core.js -- 到底是什么
- 编译器那些术语
- 词法解析 -- tokenize
- 语法解析 -- ast
- 遍历节点 -- traverser
- 转换阶段、生成阶段略
- babel
- babel -- 初步上手之了解
- babel -- 初步上手之各种配置(preset-env)
- babel -- 初步上手之各种配置@babel/helpers
- babel -- 初步上手之各种配置@babel/runtime
- babel -- 初步上手之各种配置@babel/plugin-transform-runtime
- babel -- 初步上手之各种配置(babel-polyfills )(未来)
- babel -- 初步上手之各种配置 polyfill-service
- babel -- 初步上手之各种配置(@babel/polyfill )(过去式)
- babel -- 总结
- 各种工具
- 前端 -- 工程化
- 了解 -- Yeoman
- 使用 -- Yeoman
- 了解 -- Plop
- node cli -- 开发自己的脚手架工具
- 自动化构建工具
- Gulp
- 模块化打包工具为什么出现
- 模块化打包工具(新) -- webpack
- 简单使用 -- webpack
- 了解配置 -- webpack.config.js
- webpack -- loader 浅解
- loader -- 配置css模块解析
- loader -- 图片和字体(4.x)
- loader -- 图片和字体(5.x)
- loader -- 图片优化loader
- loader -- 配置解析js/ts
- webpack -- plugins 浅解
- eslit
- plugins -- CleanWebpackPlugin(4.x)
- plugins -- CleanWebpackPlugin(5.x)
- plugin -- HtmlWebpackPlugin
- plugin -- DefinePlugin 注入全局成员
- webapck -- 模块解析配置
- webpack -- 文件指纹了解
- webpack -- 开发环境运行构建
- webpack -- 项目环境划分
- 模块化打包工具 -- webpack
- webpack -- 打包文件是个啥
- webpack -- 基础配置项用法
- webpack4.x系列学习
- webpack -- 常见loader加载器
- webpack -- 移动端px转rem处理
- 开发一个自己loader
- webpack -- plugin插件
- webpack -- 文件指纹
- webpack -- 压缩css和html构建
- webpack -- 清里构建包
- webpack -- 复制静态文件
- webpack -- 自定义插件
- wepack -- 关于静态资源内联
- webpack -- source map 对照包
- webpack -- 环境划分构建
- webpack -- 项目构建控制台输出
- webpack -- 项目分析
- webpack -- 编译提速优护体积
- 提速 -- 编译阶段
- webpack -- 项目优化
- webpack -- DefinePlugin 注入全局成员
- webpack -- 代码分割
- webpack -- 页面资源提取
- webpack -- import按需引入
- webpack -- 摇树
- webpack -- 多页面打包
- webpack -- eslint
- webpack -- srr打包后续看
- webpack -- 构建一个自己的配置后续看
- webpack -- 打包组件和基础库
- webpack -- 源码
- webpack -- 启动都做了什么
- webpack -- cli做了什么
- webpack - 5
- 模块化打包工具 -- Rollup
- 工程化搭建代码规范
- 规范化标准--Eslint
- eslint -- 扩展配置
- eslint -- 指令
- eslint -- vscode
- eslint -- 原理
- Prettier -- 格式化代码工具
- EditorConfig -- 编辑器编码风格
- 检查提交代码是否符合检查配置
- 整体流程总结
- 微前端
- single-spa
- 简单上手 -- single-spa
- 快速理解systemjs
- single-sap 不使用systemjs
- monorepo -- 工程
- Vue -- 响应式了解
- Vue2.x -- 源码分析
- 发布订阅和观察者模式
- 简单 -- 了解响应式模型(一)
- 简单 -- 了解响应式模型(二)
- 简单 --了解虚拟DOM(一)
- 简单 --了解虚拟DOM(二)
- 简单 --了解diff算法
- 简单 --了解nextick
- Snabbdom -- 理解虚拟dom和diff算法
- Snabbdom -- h函数
- Snabbdom - Vnode 函数
- Snabbdom -- init 函数
- Snabbdom -- patch 函数
- 手写 -- 虚拟dom渲染
- Vue -- minVue
- vue3.x -- 源码分析
- 分析 -- reactivity
- 好文
- grpc -- 浏览器使用gRPC
- grcp-web -- 案例
- 待续