目前基本使用三种js代码质量检测工具:jslint、jshint、eslint。很多IDE也有相应的检查插件,每次ctrl+s保存文件时都会检查当前文件是否符合规范,保证代码质量。很多团队会指定一套代码规范codereview,更加严格的检查每一次代码修改。也可以在gitcommit之前检查代码,确保所有提交到仓库的代码都是合规的。在查看Vue源码的时候,难免会修改代码,这会触发配置的钩子函数。因此,仔细研究vue的配置方法后,我们可以发现配置非常简单。githook文档非常详细。在gitinit之后,在.git/hooks文件中,有一些以.simple结尾的示例钩子脚本。如果要启用相应的钩子功能,只需要手动删除后缀即可。因此列出两种配置方式:1.手动修改hook文件根据文档,配置hook脚本,修改hooks中文件名对应的hook文件,启用hook。使用shell脚本查看,可以参考vue1.x中的使用方法!/usr/bin/envbash#获取需要lint的文件FILES=$(gitdiff--cached--name-only|grep-E'^src|^test/unit/specs|^test/e2e')#如果有的话lint它们if[[$FILES]];然后./node_modules/.bin/eslint$FILESfi文件名是pre-commit,commit前启用一个钩子函数,使用gitdiff查看当前修改了哪些文件,只使用eslint查看修改文件中的代码指定文件夹,逐步实现整个项目的代码规范。脚本写好后,不需要每次都手动复制到.git/hooks目录下,只需要创建一个当前文件的软链接,进入指定目录,在package.json中配置脚本命令即可,"scripts":{"install-hook":"ln-s../../build/git-hooks/pre-commit.git/hooks/pre-commit",}项目初始化完成后,执行npm运行install-hook,方便配置pre-commithook2.使用yorkie或husky+lint-staged构建hooks在最新版本的vue中,已经使用了友达重写的youkie。Youkie其实是forkhusky,然后做了一些自定义的改动,让hook可以从package.json的"gitHooks"属性中读取,{"gitHooks":{"pre-commit":"foo"}}和husky的用法类似,可以查看husky的文档,有很详细的介绍。npminstallhusky--save-dev#ornpminstallyorkie--save-dev安装完成后可以发现hooks目录下的文件都被改写了,只需要配置要执行的脚本即可package.json中相应的钩子。哈士奇配置://package.json{"husky":{"hooks":{"pre-commit":"npmtest","pre-push":"npmtest","...":"..”}}}回过头来,vue中如何配置//package.json"gitHooks":{"pre-commit":"lint-staged","commit-msg":"nodescripts/verify-commit-msg.js"}"lint-staged":{"*.js":["eslint--fix","gitadd"]}前面说过,使用gitdiff,只对当前变化的文件进行lint,而lint-staged就是它非常准确地解决了这个问题。从包名可以看出,Runlintersongitstagedfiles只处理变化的文件。配合husky使用,安装依赖:npminstall--save-devlint-stagedhusky修改package.json文件{+"husky":{+"hooks":{+"pre-commit":"lint-staged"+}+},+"lint-staged":{+"*.js":["eslint--fix","gitadd"]+}}使用了eslint,需要配置.eslintrc,lint-staged也有一个优点是在lint之后,可以更加灵活,执行其他脚本,尝试修改错误,比如eslint--fix来检查和修复错误。上面列出的vue文件使用类似的配置,并添加一个commit-msg钩子来检查提交说明。检查脚本可以在scripts/verify-commit-msg.js文件中找到,constchalk=require('chalk')constmsgPath=process.env.GIT_PARAMSconstmsg=require('fs').readFileSync(msgPath,'utf-8').trim()constcommitRE=/^(revert:)?(feat|fix|polish|docs|style|refactor|perf|test|workflow|ci|chore|types|build)(\(.+\))?:.{1,50}/if(!commitRE.test(msg)){控制台。log()console.error(`${chalk.bgRed.white('ERROR')}${chalk.red(`无效的提交信息格式。`)}\n\n`+chalk.red(`正确的提交信息自动更新日志生成需要格式。示例:\n\n`)+`${chalk.green(`feat(compiler):add'comments'option`)}\n`+`${chalk.green(`fix(v-model):处理模糊事件(关闭#28)`)}\n\n`+chalk.red(`有关详细信息,请参阅.github/COMMIT_CONVENTION.md。\n`)+chalk.red(`您还可以使用${chalk.cyan(`npmruncommit`)}以交互方式生成提交消息。\n`))process.exit(1)}使用process.env.GIT_PARAMS找到目录,阅读msg描述,并检查它。使用husky时需要注意的是,对应的属性名已经改为HUSKY_GIT_PARAMS,而不是原来的GIT_PARAMS环境变量。
