背景
多集体做一个我的项目的时候,总是因为大家代码格调不对立,须要通过文档约定的形式来对立格调。
比方文件起名形式,有的人首字母大写,有的人首字母小写,在js,ts,vue中又有这种迥异的格调。针对这种状况,咱们起了个约定文档,规定应该怎么给文件夹命名,然而这种有个毛病就是,无奈从本源上解决,也就是新来的共事可能不晓得这个规定,而后就新建了一个非约定的文件名。
除了文件名,提交标准也是迥异的,有的人commit的时候不加type,这种咱们也是起了个约定文档。
缓缓的文件目录就多了个docs
文档是有益处的,然而也无奈从本源上限度问题。所以当初的前端我的项目,引出了工作流理念,也多了很多定制工作流的辅助工具。
工作流概览
多人的我的项目,总是须要规定一些标准,为了让代码格调尽量对立。咱们须要用到以下工具:
- 代码丑化 - prettier
- 语法标准 - airbnb
- 语法校验 - eslint
- git-hook - husky
- 提交标准 - commitlint
- 文件命名标准 - ls-lint
- 主动修复代码 - lint-staged
eslint & prettier
这里有一篇写得比拟好的文章,这里就不开展讲怎么配置了。
commitlint 代码提交标准
commitlint 用来帮忙团队恪守提交标准,更多信息可查看官网
装置
npm install --save-dev @commitlint/config-conventional @commitlint/cli
格局
[type]: [subject]
type为以下字段
- feat:新性能(feature)
- fix:修补bug
- docs:文档(documentation)
- style: 格局(不影响代码运行的变动)
- refactor:重构(即不是新增性能,也不是批改bug的代码变动)
- test:减少测试
- chore:构建过程或辅助工具的变动
- upd: 更新功能模块
- workflow: 工作流变动
- subject为形容内容,比方
修复设施日志色彩值转换的问题
残缺的形容,⚠️ 留神冒号后带空格,比方
git commit -m 'fix: 修复设施日志色彩值转换的问题'git commit -m 'chore: 批改commitlint配置文件'
commitlint.config.js
commitlint反对终端输出指令的模式执行校验,当然也反对配置文件的模式。
配置文件的具体内容如下:
rulers字段,由name和配置数组组合,配置数组包含:
- Level
[0,1,2]
: 0示意禁用规定,1会被视为正告,2抛出异样- Applicable
always|never
: 是否利用规定- Value: 改规定利用的值
配置数组能够是:数组,返回数组的函数,返回数组的promise。
module.exports = { extends: ['@commitlint/config-conventional'], rules: { 'type-enum': [ 2, 'always', ['upd', 'feat', 'fix', 'refactor', 'docs', 'chore', 'style', 'revert'], ], 'type-case': [0], 'type-empty': [0], 'scope-empty': [0], 'scope-case': [0], 'subject-full-stop': [0, 'never'], 'subject-case': [0, 'never'], 'header-max-length': [0, 'always', 72], },};
配置git-hook
githook其实就是你在git操作时的回调。这里咱们只关怀一个git-hook就是pre-commit,提交前的回调。
通过对commitlint的配置,咱们曾经对提交标准做了配置,然而咱们遇到了一个问题,什么时候才应该去校验提交的标准。
从commitlint官网中咱们理解到,咱们须要装置husky,该插件可能通过简略的配置,执行githook。
husky & yorkie
帮忙咱们可能间接在package.json配置git-hook.
husky在package.json配置内容如下
"husky": { "hooks": { 'commit-msg': 'commitlint -E HUSKY_GIT_PARAMS', } }
如果咱们是通过vue的脚手架(vue-cli)搭建的我的项目,其实外部用了yorkie,yorkie是尤雨溪fork了husky之后做了小批改.
所以此时的package.json你能够这么配置
"gitHooks": { "commit-msg": "commitlint -e $GIT_PARAMS" },
留神两个配置传递给 -e 的参数不同,一个是HUSKY_GIT_PARAMS, 一个是GIT_PARAMS。
其实husky以前也是GIT_PARAMS,只是起初降级到v1.0.1版本当前改为HUSKY_GIT_PARAMS。
lint-staged
有个commit的githook,那是不是也能做一些代码格局丑化,修复eslint问题的工作。lint-staged就是干这个的。
应用到lint-staged
工具来辨认被退出到stage区文件,就是每次只对以后批改后的文件进行扫描,即只对git add
退出到stage区的文件进行扫描即可,实现对增量代码进行查看。
装置lint-staged
npm i -D lint-staged
lint-staged的配置如下:
"lint-staged": { "*.{js,jsx,vue,ts,tsx}": [ "vue-cli-service lint", "git add" ]}
ls-lint
在较大的我的项目中,咱们须要约定文件的命名格局标准。如下:
1.文件夹 & 文件采纳camelCase(小驼峰),比方:text文件夹 ./layout/...文件名 iiapHeader.vue
ls-lint帮忙咱们主动校验文件命名标准,省去了约定的麻烦,咱们只须要在提交的时候,测验文件的命名标准即可
在npm中退出如下命令
"scripts": { "ls-lint": "ls-lint"},
.ls-lint.yml文件配置如下:
ls: .vue: PascalCase .js: kebab-case .config.js: lowercase .ts: camelCase | PascalCase .d.ts: camelCase | kebab-case .spec.ts: camelCase | PascalCase .mock.ts: camelCase .vdom.js: kebab-case .spec.js: kebab-caseignore: - dist - test - .babelrc.js - .eslintrc.js - .prettierrc - .github - .git - node_modules
残缺的配置
所以咱们整个workflow集成:
代码格调对立 -> eslint优化 -> 文件命名标准 -> 提交标准
咱们别离创立:
- .ls-lint.yml
- commitlint.config.js
package.json配置:
"scripts": { "ls-lint": "ls-lint"},"gitHooks": { "pre-commit": "ls-lint && lint-staged", "commit-msg": "commitlint -e $HUSKY_GIT_PARAMS"},"lint-staged": { "*.{js,jsx,vue,ts,tsx}": [ "vue-cli-service lint", "git add" ]}