前言 项目需要多人合作时,就需要规范一个代码风格和提交流程,当前业界有很多相关的规范和插件,本文对这些插件的配置做个整合,同时给出个人常用的风格配置,用到的插件如下:
husky 配置 pre-commit
commitlint 进行commit规范
prettier eslint 进行代码样式风格配置(以Next项目为底)
lint-staged 对暂存文件执行修改命令
husky 配置 pre-commit husky 是一个流行的工具,用于在 Git 钩子中轻松运行脚本。Git 钩子是在特定事件发生时触发的脚本,例如 pre-commit、pre-push 等。husky 允许你在这些事件发生时自动运行命令,比如代码风格检查、测试或其他自定义脚本,以确保代码提交之前满足特定的质量标准。它以在 git commit 之前做某些检查,例如 npm run lint ,在 .husky/pre-commit 文档中配置。
1 2 3 4 5 6 7 pnpm add --save-dev husky pnpm exec husky init git commit -m "Keep calm and commit"
commitlint 进行commit规范 commitlint 用于规范 git commit 时的写法,提交代码时必须按照一定的格式规范,不能乱写。具体的格式可以参考这里What is Commitlint
1 2 pnpm install --save-dev @commitlint/{config-conventional,cli}
prettier eslint 进行代码样式风格配置 Prettier 是一个流行的代码格式化工具,它支持多种语言和框架,包括 JavaScript、TypeScript、CSS、HTML 等。Prettier 的主要目标是提供一个统一的代码格式化标准,以减少代码审查中关于风格的讨论,并确保项目中的代码风格一致性。
1 2 3 4 5 6 "lint" : "next lint" , "format" : "prettier --check ." , "format:fix" : "prettier --write --list-different ."
1 2 3 4 5 6 pnpm install prettier eslint-config-prettier --save-dev pnpm install -D prettier-plugin-tailwindcss pnpm run format:fix
1 2 3 4 5 6 7 8 9 10 11 12 13 14 { "useTabs" : false , "tabWidth" : 2 , "trailingComma" : "es5" , "semi" : false , "singleQuote" : true , "bracketSpacing" : true , "arrowParens" : "always" , "jsxSingleQuote" : false , "bracketSameLine" : false , "endOfLine" : "lf" , "plugins" : [ "prettier-plugin-tailwindcss" ] }
1 2 3 4 { "extends" : [ "next/core-web-vitals" , "prettier" ] }
lint-staged 对暂存文件执行修改命令 单纯配置上述插件后,实际会发现在执行后会先提交commit,然后再format fix文件,所以可以使用lint-staged 插件,对暂存文件执行修改命令,修改后再commit。
1 pnpm install lint-staged -D
1 2 3 4 5 6 7 8 9 "scripts" : { "lint-staged" : "lint-staged" } , { "*.{js,jsx,ts,tsx,json,mjs,yaml}" : [ "prettier --write --list-different ." ] }
最后的测试 我们以一个Next项目为例来实际操作一下上述的这些指令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 pnpx create-next-app@latest Progress: resolved 1, reused 0, downloaded 1, added 1, done ✔ What is your project named? … lint-demo ✔ Would you like to use TypeScript? … No / Yes ✔ Would you like to use ESLint? … No / Yes ✔ Would you like to use Tailwind CSS? … No / Yes ✔ Would you like to use `src/` directory? … No / Yes ✔ Would you like to use App Router? (recommended) … No / Yes ✔ Would you like to customize the default import alias (@/*)? … No / Yes Creating a new Next.js app in /Users/banjian/workplace/lint-demo. cd lint-demo.husky .husky/_ .husky/pre-commit node_modules public src .eslintrc.json .gitignore .lintstagedrc.json .prettierrc.js next-env.d.ts next.config.mjs package.json pnpm-lock.yaml postcss.config.mjs README.md tailwind.config.ts tsconfig.json git add . git commit -m "chore: init project"
结果
Next项目默认的文件的代码也被改为我们设置的风格了:
总结 最后回顾下各个插件的作用:
husky 用于Git钩子中轻松运行脚本,我们一般使用pre-commit
commitlint 用来规范commit的提交
lint-staged 用于执行脚本修改暂存的文件用于commit
prettier、eslint 代码风格、规范测试工具,保持团队代码风格统一
上述工具还有很多高级进阶用法,可以参考官网进一步了解,如果有什么问题也欢迎留言交流!
参考:
How to
What is commitlint
NextJS set up with TypeScript, ESLint and Prettier
lint-staged