什么是husky当你commit或者push的时候,你可以使用husky来检查你的提交信息,运行测试,检查代码等。Husky支持所有的Githooks[1].它是如何工作的以一种非常Linux的方式,要配置一个Git钩子,你只需将一个可执行文本文件放入.git/hooks/,以便能够运行用户在.huskyrc.js中创建的任何Git钩子,husky是Installallpossible.git/hooks/中的钩子。比如commit时,每个Githook都会检查.huskyrc.js中是否有定义对应的hook:$gitcommitpre-commit(native)→husky/runner.js(node)→isapre-commitdefined在.huskyrc.js中?→是,运行itprepare-commit-msg(native)→husky/runner.js(node)→是.huskyrc.js中定义的prepare-commit-msg吗?→NO,donothing-commit-msg(native)→husky/runner.js(node)→是.huskyrc.js中定义的commit-msg吗?→不,什么都不做提交后(本地)→husky/runner.js(节点)→是在.huskyrc.js中定义的提交后?→NO,什么也不做复制代码它的好处:用户可以在.huskyrc.js中添加、更新和删除钩子,并且会自动选择更改。缺点是即使没有运行,节点也会启动。如何使用接下来我将使用eslintprettierhusky完成一个提交代码时触发代码自动检测的demo。设置代码风格eslint配置代码风格和质量校验,prettier用于代码格式校验,lint-staged过滤文件首先要明确一点,lint-staged只是一个文件过滤器,不会帮你格式化任何东西,所以没有代码规则配置文件,需要自己配置,比如:.eslintrc、.stylelintrc等,然后在package.json中导入。eslint和prettier是一起使用的,即使用prettier进行格式化,使用eslint进行代码校验。首先,在ESLint推出--fix参数之前,ESLint没有自动格式化代码的功能,而Prettier可以自动格式化代码。其次,虽然ESLint也可以检查代码格式,但Prettier更擅长。所以还需要eslint-config-prettier和eslint-plugin-prettier加强两者的配合。推荐配置,并关闭eslint自带的格式化功能,防止Prettier和ESLint自动格式化冲突。安装需要的npm包:npmieslintprettierlint-stagedeslint-plugin-prettiereslint-config-prettier拷贝代码常用配置.prettier.jsmodule.exports={printWidth:120,//newlinestringthresholdtabWidth:2,//设置工具每次水平缩进的空格数useTabs:false,semi:false,//是否在句末加分号vueIndentScriptAndStyle:true,singleQuote:true,//使用单引号trailingComma:'none',//给最后一个对象元素添加逗号bracketSpacing:true,//给对象和数组添加空格jsxBracketSameLine:true,//jsx>是否开始换行arrowParens:'always',//(x)=>{}是否带括号requirePragma:false,//文件开头不需要写@prettierinsertPragma:false//文件开头不需要自动插入@prettier}复制代码.eslintrc.js推荐使用自己的项目配置:module.exports={root:true,env:{browser:true,node:true,es6:true},extends:['prettier','plugin:prettier/recommended'],rules:{...yourselfConfig}}复制代码自动配置huskyyarnaddhusky--dev#mustinstallnpxhusky-initinstall#npmnpxhusky-init#Yarn1yarndlxhusky-init#Yarn2+pnpmdlxhusky-init#pnpm复制它将设置husky的代码,修改package.json并创建一个您可以编辑的预提交示例挂钩默认情况下,它将在您提交时运行npmtest。例如:image.png将示例npmtest更改为yarnlint-staged或您自己定义的命令:添加lint-staged命令“lint-staged”:“lint-staged--allow-empty”,jsonlint-staged:js":"eslint--ext.js,.jsx,.ts,.tsx","lint-staged":{"**/*.{js,jsx,ts,tsx}":"yarnrunlint-staged:js","**/*.{js,jsx,tsx,ts,less,md,json}":["prettier--write"]}复制代码示例:image.pngingitcommit时会触发.husky/pre-commit文件下的命令行yarnlint-staged或者你自己定义的命令。当代码检查成功后,它会自动格式化代码并为您提交。如果检测到错误,它将停止提交并通知错误行。及时改正后可再次提交。比如:image.png当我gitcommit的时候,它会自动检测不符合规范的代码,如果不能自己修复,它会抛出错误文件给你!在此之前,需要配置eslint和prettier~
