工作中,我们是否经常遇到以下情况:
关于代码语法检查、代码格式化、commit注释规范、代码编译等等这些工作量繁杂且巨大的苦力活,除非你不想把人当马用,那还是交给机器去做,是吗?
前端领域早已不是以前的纯js、jquery 时代,模块化、工程化也成为了前端领域的追求,这样才能保证前端程序的可读性,可维护性,健壮性等等
前端工程化已经发展了有些年月了,大量提高效率的包如雨后春笋般涌出。所以作为小前端的我也忍不住去探索一番,毕竟谁也不想疯狂加班,被当作马使,也想下早班开启简单开心的生活
本文旨在记录探索前端基本工程化的实践过程,方便自己以后翻阅,请轻喷(ps: 这篇文章聚焦代码检查,代码美化,commit规范,其中有借助chatgpt)
项目基本技术选型为:react + ts,所以将以此为基础展开前端工程化基本配置
husky 是一个用于在 Git 钩子中运行命令的工具,它能够在代码提交或推送等特定事件中自动触发指定的命令。通过 husky,你可以在代码提交前、提交后、推送前等场景下运行脚本,以进行代码风格检查、单元测试、构建等操作
安装如下:
用快捷命令完成上面的安装步骤
# npmnpx husky-init && npm install# yarnyarn dlx husky-init --yarn2 && yarn#pnpmpnpm dlx husky-init && pnpm install
lint-staged是一个用于在 git 暂存文件上运行指定命令的工具。它可以帮助你在提交代码前,只对即将提交的文件进行代码风格检查、格式化、静态分析等操作,以便在代码提交之前保持代码的质量和一致性
基本使用如下:
# npmnpm install lint-staged --save-dev#yarn yarn add lint-staged --dev#pnpmpnpm add lint-staged --save-dev
{ "scripts": { "lint": "eslint src" }, "lint-staged": { "src/**/*.{ts,tsx}": [ "npm run lint", // 运行自定义的 lint 脚本 "git add" // 添加修复后的文件到暂存区 ] }}
以上配置表示:对于 src 目录下的所有后缀为 ts 和 tsx 的文件,在提交前会运行 npm run lint 命令来进行语法检查,然后将修复后的文件添加到暂存区
实际开发时,lint-staged 一般会配合 pre-commit 钩子进行 commit 之前的动作,所以我们替换 pre-commit 钩子内容如下:
#!/usr/bin/env sh. "$(dirname -- "$0")/_/husky.sh"npx lint-staged
commitlint 是一个用于规范化 Git 提交消息的工具。它帮助团队确保每个提交消息都符合统一的规范,以提高代码仓库的可读性和可维护性
这里直接展示commitlint搭配husky一起使用
# npm npm install @commitlint/cli @commitlint/config-conventional --save-dev # yarn yarn add @commitlint/cli @commitlint/config-conventional --dev # pnpm pnpm add @commitlint/cli @commitlint/config-conventional --save-dev
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'
{ "commitlint": { "extends": [ "@commitlint/config-conventional" ], "rules": { "type-enum": [ 2, "always", [ "build", "chore", "ci", "docs", "feat", "fix", "perf", "refactor", "revert", "style", "test", "ui", "version" ] ] } }}
commitlint提供的11注释类型解释如下:
代码检查借助了eslint, typescript-eslint
eslint是一个用于检查和修复 JavaScript 代码错误、风格和质量问题的工具。它可以帮助开发人员和团队在编码过程中遵循一致的编码规范,提高代码可读性、可维护性和质量
typescript-eslint是一个用于对 TypeScript 代码进行检查和修复的工具。它基于eslint,提供了一套规则和插件,可以检查和修复 TypeScript 代码中的错误、风格和质量问题
综上所诉,需要开发环境下安装如下包:
# npmnpm install eslint eslint-plugin-react-hooks eslint-plugin-react-refresh @typescript-eslint/parser @typescript-eslint/eslint-plugin --save-dev# yarnyarn add eslint eslint-plugin-react-hooks eslint-plugin-react-refresh @typescript-eslint/parser @typescript-eslint/eslint-plugin --dev# pnpmpnpm add eslint eslint-plugin-react-hooks eslint-plugin-react-refresh @typescript-eslint/parser @typescript-eslint/eslint-plugin --save-dev
eslint基本使用步骤如下:
typescript-eslint基本使用步骤如下:
#npm npm install @typescript-eslint/parser @typescript-eslint/eslint-plugin --save-dev# yarnyarn add @typescript-eslint/parser @typescript-eslint/eslint-plugin --dev#pnpmpnpm add @typescript-eslint/parser @typescript-eslint/eslint-plugin --save-dev
eslint配置文件如下(以.eslintrc为例):
module.exports = { root: true, env: { browser: true, es2020: true }, extends: [ 'eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react-hooks/recommended', ], ignorePatterns: ['dist', '.eslintrc.cjs'], parser: '@typescript-eslint/parser', plugins: ['react-refresh'], rules: { 'react-refresh/only-export-components': [ 'warn', { allowConstantExport: true }, ], '@typescript-eslint/ban-ts-comment': 'off' }}
以下为结合 lint-staged 配置的代码检查命令:
{ "scripts": { "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --ext ts,tsx --fix", }, "lint-staged": { "*.(ts|tsx)": [ "eslint --quiet" ] }}
prettier是一个代码格式化工具,它可以自动调整代码的格式,使其符合统一的风格规范
基本使用如下:
# npm npm install prettier --save-dev# yarnyarn add prettier --dev#pnpmpnpm add prettier --save-dev
{ "prettier": { "trailingComma": "all", "arrowParens": "always", "printWidth": 120 }}
实际应用时会在 commit 之前进行美化代码,以下为结合 lint-staged 配置的代码检查+代码美化命令:
{ "prettier": { "trailingComma": "all", "arrowParens": "always", "printWidth": 120 }, "lint-staged": { "*.(ts|tsx)": [ "eslint --quiet" ], "*.(ts|tsx|json|html)": [ "prettier --write" ] }}
本文链接:http://www.28at.com/showinfo-26-10452-0.html前端工程化小记
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: Serverless vs Containers:哪个适合您的业务?
下一篇: 算法和数据结构:解析与应用