Vue项目搭建ESLint+prettier+husky+lint-staged

201 阅读3分钟

一、使用 vite 创建新项目

1. 创建项目空文件夹

2. 执行命令,创建 vite + vue3 项目

npm create vite@latest
# or
pnpm create vite

二、配置 vue-router

1. src 下创建 router/index.js

import { createRouter, createWebHistory } from 'vue-router'

const routes = [
	{
		path: '/',
		name: 'Home',
		component: () => import('@/components/test/home.vue'),
	},

	{
		path: '/about',
		name: 'About',
		component: () => import('@/components/test/about.vue'),
	},
]

const router = createRouter({
	history: createWebHistory(),
	routes,
})

export default router

2. 在 main.js 中引入

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'

const app = createApp(App)
app.use(router)
app.mount('#app')

三、配置 pinia

1. src 下创建 store/index.js

import { createPinia } from 'pinia'

const pinia = createPinia()

export default pinia

2. 在 main.js 中引入

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import pinia from './store'

const app = createApp(App)
app.use(router)
app.use(pinia)
app.mount('#app')

四、配置 element-plus

1. 安装 element-plus

pnpm i element-plus

2. 在 main.js 中全局注册 element-plus

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import pinia from './store'

import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import './style/style.css' // 自定义全局样式

const app = createApp(App)
app.use(router)
app.use(pinia)
app.use(ElementPlus)
app.mount('#app')

五、重置样式表

1. 安装 normalize.css

pnpm i normalize.css

2. 在 main.js 中引入 normalize.css

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import pinia from './store'

import 'normalize.css' // 引入 normalize.css
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import './style/style.css' // 自定义全局样式

const app = createApp(App)
app.use(router)
app.use(pinia)
app.use(ElementPlus)
app.mount('#app')

六、配置 ESLint + prettier

juejin.cn/post/721734…

新版 eslint 如下配置

blog.csdn.net/u013344993/…

七、配置 husky,自动处理检测代码规范、提交信息

1. 在提交代码,git commit 之前,进行 prettier 操作

pnpm i husky -D

2. 手动初始化 husky,执行如下命令

a. 手动初始化,执行如下命令
npx husky install
b. 安装全部依赖时,会自动初始化

package.json 注册 prepare 命令,在项目进行 pnpm i 后会自动初始化 husky

"prepare": "husky install"

3. 创建git hooks,生成 pre-commit 钩子,执行 npm run lint

// 在 git commit 之前,先执行
npx husky add .husky/pre-commit "npm run lint"

在 .husky 目录中生成了一个新的文件 pre-commit

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npm run lint

4. git commit 信息规范

pnpm i commitlint @commitlint/cli @commitlint/config-conventional -D


"commitlint": "^17.4.2" // commitlint 主包
"@commitlint/cli": "^17.4.2", // 规范提交信息
"@commitlint/config-conventional": "^17.4.2", // commitlint 常用的msg配置

5. 根目录添加 .commitlintrc.cjs文件,配置commitlint的配置

module.exports = {
    extends: ['@commitlint/config-conventional']
}

6. 创建git hooks,生成.husky/commit-msg

a. 命令行执行如下命令
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
b. 生成如下文件内容
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npx --no-install commitlint --edit "$1"

八、lint-staged

1. 只格式化要提交的代码

pnpm i lint-staged -D

2. 在 package.json 中新增

 "lint-staged": {
     // 只针对如下后缀文件 eslint 格式化修复
    "*.{js,jsx,ts,tsx}": [
      "eslint --fix",
      "prettier --write"
    ]
}

3. 对 pre-commit 这个钩子进行修改内容

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npx --no -- lint-staged

九、vite 相关配置

1. 自动导入插件 unplugin-auto-import/vite

pnpm i unplugin-auto-import/vite -D
# or
npm i unplugin-auto-import/vite -D

2. 支持 jsx @vitejs/plugin-vue-jsx

pnpm i @vitejs/plugin-vue-jsx -D
# or
npm i @vitejs/plugin-vue-jsx -D

十、打版工具集成

1. 安装开发依赖

pnpm i select-version-cli -D
# or
npm i standard-version -D

2. 根目录放置 sh 脚本

#!/usr/bin/env sh
set -e

VERSION=`npx select-version-cli`

# read -p "Releasing $VERSION - are you sure? (y/n)" -n 1 -r
# echo    # (optional) move to a new line
# if [[ $REPLY =~ ^[Yy]$ ]]
# then
echo "Releasing $VERSION ..."

npx standard-version --release-as "$VERSION"

git push --follow-tags origin main  #根据分支自行修改

3. package.json 中配置快捷执行指令

"scripts": {
	"release": "sh ./scripts/release.sh",
},