本文节选自我的博客:前端工程化 - 规范项目创建 React+Vite+TS
随着前端技术的快速发展,前端工程化已经成为现代化前端开发的必备技能。本篇文章。来带大家实现一个标准化前端项目。主要技术有技术栈为React + Vite + TS,用到规范工具有eslint+prettier+stylelint,规范化Git提交流程工具husky + commitlint + lint-staged,还有vite与tsconfig的配置。
vscode先提前装好eslint,prettier,stylelint这三个插件。
后面统一使用pnpm包管理工具,pnpm是什么,先理解就是一个强大的包管理工具。
npm install -g pnpm
pnpm config set registry https://registry.npm.taobao.org/
注意:这里加右划线转义
pnpm create vite react-starter --template react-swc-ts
pnpm i
pnpm i @types/node -D
“engines”: { “node”: “>=16.0.0” },
pnpm i eslint -D
生成配置文件
pnpm eslint --init
在选项中按下面选择
- To check syntax and find problems //这个选项是eslint默认选项,这样就不会和pretter起风格冲突
- JavaScript modules (import/export)
- React
- YES
- Browser
- JSON
- Yes
- pnpm
"rules": {
//不用手动引入react
"react/react-in-jsx-scope": "off",
//使用any报错
"@typescript-eslint/no-explicit-any": "error",
}
比如写了一个 var a = 100,会被自动格式化为 const a = 100
{
"editor.codeActionsOnSave": {
// 每次保存的时候将代码按照 eslint 格式进行修复
"source.fixAll.eslint": true,
//自动格式化
"editor.formatOnSave": true
}
}
为什么上面有 vscode 自动 eslint 格式化,还需要命令行: 因为命令行能一次性爆出所有警告问题,便于找到位置修复,这是使用eslint代码检查并修复的命令
npx eslint . --fix_//用npx使用项目里的eslint,没有的话也会去使用全局的eslint_
npx eslint . --fix //全部类型文件
npx eslint . --ext .ts,.tsx --fix //–ext可以指定文件后缀名s
eslintrc.json 里配置
"env": {
"browser": true,
"es2021": true,
"node": true // 因为比如配置vite的时候会使用到
},
pnpm i prettier -D
{
"singleQuote": true, // 单引号
"semi": false, // 分号
"trailingComma": "none", // 尾随逗号
"tabWidth": 2, // 两个空格缩进
"plugins": ["prettier-plugin-tailwindcss"] //tailwind插件
}
dist
pnpm-lock.yaml
{
"editor.codeActionsOnSave": {
// 每次保存的时候将代码按照 eslint 格式进行修复
"source.fixAll.eslint": true
},
//自动格式化
"editor.formatOnSave": true,
//风格用prettier
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
npx prettier --write . //使用Prettier格式化所有文件
pnpm i -D stylelint stylelint-config-standard
{
"extends": "stylelint-config-standard"
}
{
"editor.codeActionsOnSave": {
"source.fixAll.stylelint": true //自动格式化stylelint
},
}
git init
pnpm i husky -D
pnpm husky install
// commit-msg 使用 commitlint
npx husky add .husky/commit-msg ‘npx --no – commitlint --edit “$1”’
// pre-commit 使用 lint-staged,
npx husky add .husky/pre-commit “npm run lint-staged”
commitlint即是给git commit的信息检查的,提交规范参考
pnpm i @commitlint/cli @commitlint/config-conventional -D
@commitlint/config-conventional 这个预设规则集合。它定义了一组规则,用于检查 Git Commit Message 是否符合常用的约定。这些约定包括 Commit Message 的格式、类型、主题、正文等,以确保 Commit Message 的清晰和一致性。通过使用这个配置,你可以在提交代码时自动检查 Commit Message 是否符合规范,从而提高代码质量和可维护性。
.commitlintrc.json
添加配置如下{
"extends": ["@commitlint/config-conventional"]
}
lint-staged 是一个 Git Hook 工具,它可以在 git commit 命令执行之前,对暂存区(stage)中的文件进行检查和格式化。增量式检查是指,lint-staged 只会检查那些被修改或新增的文件,而不会检查整个代码库中的所有文件,这样可以大大提高检查的效率。
pnpm i -D lint-staged
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"prepare": "husky install",
"lint-staged": "npx lint-staged"//新增,对应上面的husky命令
},
.lintstagedrc.json
添加配置如下{
"*.{ts,tsx,json}": ["prettier --write", "eslint --fix"],
"*.css": ["stylelint --fix", "prettier --write"]
}
前面配置husky 、commitlint 和 lint-staged ,那如何使用这些规范呢。当我们输入git commit
命令后会弹出vim的文件编辑窗,需要如下规则提交。更多规则参考
符合规范的Commit Message的提交格式如下,包含了页眉(header)、**正文(body)和页脚(footer)**三部分。其中,header是必须的,body和footer可以忽略。
type([scope]): subject
// 空一行
[body]
// 空一行
[footer]
type([scope])必须是以后的类型之一
build: 改变了项目构建系统或外部依赖项。
ci: 更改了CI配置或脚本。
docs: 只更改文档。
feat: 新功能。
fix: 修复了一个 bug。
perf: 改进了性能。
refactor: 代码重构,既没有增加新功能,也没有修复 bug。
style: 格式化、缺少分号等;对代码逻辑没有影响的更改。
test: 增加或修改了测试代码。
如果有兼容性考虑,需要使用 legacy 插件,vite 也有 vscode 插件,也可以下载使用
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
import path from 'path'
// https://vitejs.dev/config/
export default defineConfig({
esbuild: {
drop: ['console', 'debugger']
},
css: {
// 开css sourcemap方便找css
devSourcemap: true
},
plugins: [react()],
server: {
// 自动打开浏览器
open: true,
proxy: {
'/api': {
target: 'https://xxxxxx',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
}
},
resolve: {
// 配置别名
alias: { '@': path.resolve(__dirname, './src') }
},
//打包路径变为相对路径,用liveServer打开,便于本地测试打包后的文件
base: './'
})
pnpm i rollup-plugin-visualizer -D
// 实际遇到了再看官网用
pnpm i @vitejs/plugin-legacy -D
在vite.config.ts添加如下配置
import { visualizer } from 'rollup-plugin-visualizer'
import legacy from '@vitejs/plugin-legacy'
export default defineConfig({
plugins: [
react(),
visualizer({
open: false // 打包完成后自动打开浏览器,显示产物体积报告
}),
//考虑兼容性,实际遇到了再看官网用
legacy({
targets: ['ie >= 11'],
additionalLegacyPolyfills: ['regenerator-runtime/runtime']
})
], // 使用 React 插件
})
{
"compilerOptions": {
// 编译目标为最新版本的 ECMAScript 版本
"target": "ESNext",
"useDefineForClassFields": true,
"lib": ["ESNext", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
// 使用了 Node.js 的模块解析方式
"moduleResolution": "Node",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"allowJs": false,
// 模块导入方式使用 CommonJS 还是 ES 模块规范 true表示为 ES 模块方式
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
},
"include": ["src"],
"references": [{ "path": "./tsconfig.node.json" }]
}
如果对您有帮助,麻烦点赞收藏,让更多踩坑的人看见,有任何疑问和想法,欢迎在评论区与我交流。