Vue項(xiàng)目中ESLint(代碼質(zhì)量檢查)與Prettier(代碼格式化)配合配置指南
前言
基于 pnpm 創(chuàng)建 Vue 項(xiàng)目,通過(guò)針對(duì)性配置實(shí)現(xiàn) ESLint(代碼質(zhì)量檢查)與 Prettier(代碼格式化)協(xié)同工作,避免規(guī)則沖突,達(dá)成 “保存即自動(dòng)修復(fù)格式與質(zhì)量問(wèn)題” 的效果。
一、項(xiàng)目創(chuàng)建與依賴準(zhǔn)備
1. 用 pnpm 創(chuàng)建 Vue 項(xiàng)目
執(zhí)行創(chuàng)建命令,過(guò)程中需選擇 ESLint 和 Prettier 相關(guān)選項(xiàng)(避免后續(xù)手動(dòng)補(bǔ)裝基礎(chǔ)依賴):
pnpm create vue@latest
創(chuàng)建時(shí)的關(guān)鍵選擇(按需求確認(rèn)):
- ? Add ESLint for code quality? → Yes
- ? Add Prettier for code formatting? → Yes
- 其他選項(xiàng)(如 Pinia、Vue Router)按需選擇,不影響 ESLint/Prettier 配合
2. 檢查并補(bǔ)全依賴
項(xiàng)目創(chuàng)建后,進(jìn)入目錄安裝依賴,同時(shí)確保關(guān)鍵依賴已存在(若創(chuàng)建時(shí)未選全,需手動(dòng)安裝):
cd 項(xiàng)目目錄 pnpm install # 補(bǔ)裝缺失的依賴(如 eslint-plugin-prettier,一般會(huì)缺失此依賴) pnpm add -D eslint-plugin-prettier
最終 package.json 中需包含的核心依賴(確認(rèn) devDependencies 字段):
"devDependencies": {
"@eslint/js": "^9.37.0", // ESLint 基礎(chǔ)規(guī)則
"@vue/eslint-config-prettier": "^10.2.0", // Vue 專用:解決 ESLint 與 Prettier 沖突
"eslint": "^9.37.0", // ESLint 核心工具
"eslint-plugin-prettier": "^5.5.4", // 關(guān)鍵:將 Prettier 規(guī)則轉(zhuǎn)為 ESLint 可識(shí)別錯(cuò)誤
"eslint-plugin-vue": "~10.5.0", // Vue 專用 ESLint 插件
"prettier": "3.6.2", // Prettier 核心工具
"vite": "^7.1.11" // 項(xiàng)目構(gòu)建工具(創(chuàng)建時(shí)自帶)
}
package.json 中的關(guān)鍵腳本(確保 scripts 字段包含):
"scripts": {
"lint": "eslint . --fix --cache", // 手動(dòng)執(zhí)行 ESLint 修復(fù)(格式+質(zhì)量問(wèn)題)
"format": "prettier --write src/" // 手動(dòng)執(zhí)行 Prettier 格式化(備用)
}
二、核心配置文件:實(shí)現(xiàn) ESLint 與 Prettier 協(xié)同
需配置 3 類文件:ESLint 配置文件、Prettier 規(guī)則文件、VSCode 全局 / 工作區(qū)配置。
1. ESLint 配置文件:eslint.config.js(項(xiàng)目根目錄)
作用:定義 ESLint 規(guī)則,整合 Prettier 規(guī)則,解決 Vue 項(xiàng)目特有的規(guī)則沖突。完整配置代碼(關(guān)鍵配置已標(biāo)注說(shuō)明):
import { defineConfig, globalIgnores } from 'eslint/config'
import globals from 'globals'
import js from '@eslint/js'
import pluginVue from 'eslint-plugin-vue'
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' // 禁用 ESLint 與 Prettier 沖突的規(guī)則
import prettier from 'eslint-plugin-prettier' // 引入 Prettier 插件(將 Prettier 規(guī)則轉(zhuǎn)為 ESLint 錯(cuò)誤)
export default defineConfig([
// 1. 指定需要檢查的文件類型
{
name: 'app/files-to-lint',
files: ['**/*.{js,mjs,jsx,vue}'], // 檢查 JS、Vue 文件
},
// 2. 忽略無(wú)需檢查的目錄(如構(gòu)建產(chǎn)物、測(cè)試報(bào)告)
globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']),
// 3. 語(yǔ)言環(huán)境配置(瀏覽器全局變量)
{
languageOptions: {
globals: {
...globals.browser, // 允許使用 window、document 等瀏覽器全局變量
},
},
},
// 4. 基礎(chǔ)規(guī)則:ESLint 官方推薦規(guī)則(通用 JS 質(zhì)量檢查)
js.configs.recommended,
// 5. Vue 基礎(chǔ)規(guī)則:Vue 官方推薦的核心規(guī)則(如模板語(yǔ)法校驗(yàn))
...pluginVue.configs['flat/essential'],
// 6. 關(guān)鍵:整合 Prettier 規(guī)則(將 Prettier 格式問(wèn)題轉(zhuǎn)為 ESLint 錯(cuò)誤,支持 --fix 修復(fù))
{
plugins: { prettier }, // 啟用 Prettier 插件
rules: {
'prettier/prettier': 'error', // 把 Prettier 格式問(wèn)題標(biāo)記為 ESLint 錯(cuò)誤
},
},
// 7. 關(guān)鍵:解決 ESLint 與 Prettier 規(guī)則沖突(如縮進(jìn)、引號(hào)規(guī)則沖突)
skipFormatting,
// 8. 自定義 Vue 規(guī)則(示例:允許單單詞組件名,如 index.vue)
{
rules: {
'vue/multi-word-component-names': 'off', // 關(guān)閉“組件名必須多單詞”檢查
// 可添加其他 ESLint 規(guī)則,如禁止使用 var:'no-var': 'error'
}
}
])
2. Prettier 規(guī)則文件:.prettierrc.json(項(xiàng)目根目錄)
作用:定義代碼格式化規(guī)則(如引號(hào)、縮進(jìn)、分號(hào)),ESLint 會(huì)讀取此文件的規(guī)則。常用配置代碼(可按需調(diào)整):
{
"$schema": "https://json.schemastore.org/prettierrc", // 引入 Prettier 規(guī)則 schema(語(yǔ)法提示)
"semi": false, // 語(yǔ)句末尾不加分號(hào)
"singleQuote": true, // 使用單引號(hào)代替雙引號(hào)
"printWidth": 100, // 每行代碼最大寬度(超過(guò)自動(dòng)換行)
"tabWidth": 2, // 縮進(jìn)為 2 個(gè)空格
"trailingComma": "none", // 對(duì)象/數(shù)組末尾不添加逗號(hào)
"arrowParens": "avoid" // 箭頭函數(shù)參數(shù)只有一個(gè)時(shí),省略括號(hào)(如 (a) => {} → a => {})
}
后續(xù)需新增格式化規(guī)則(如換行符、空格),直接在此文件添加即可。
3. VSCode 配置文件:settings.json(工作區(qū)或全局)
作用:指定 VSCode 編輯器的格式化工具、保存行為,確保與項(xiàng)目配置對(duì)齊,避免插件沖突。完整配置代碼(關(guān)鍵配置已標(biāo)注,保留用戶原有非沖突配置):
{
// ---------------------- 原有非沖突配置(保留)----------------------
"Codegeex.Privacy": true,
"explorer.confirmDelete": false,
"workbench.iconTheme": "vscode-icons",
"editor.fontSize": 17,
"editor.tabSize": 2,
"editor.formatOnPaste": true,
"github.copilot.enable": { "*": false },
"editor.minimap.enabled": false,
// ... 其他原有配置(如 LeetCode、DrawIO 相關(guān))保留不變
// ---------------------- ESLint 與 Prettier 核心配置 ----------------------
// 1. 全局默認(rèn)格式化器設(shè)為 ESLint(確保所有文件用 ESLint 格式化)
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
// 2. 單獨(dú)指定 Vue/JS 文件的格式化器(優(yōu)先級(jí)高于全局,避免工具沖突)
"[vue]": {
"editor.defaultFormatter": "dbaeumer.vscode-eslint"
},
"[javascript]": {
"editor.defaultFormatter": "dbaeumer.vscode-eslint"
},
// 3. 保存時(shí):觸發(fā) ESLint 自動(dòng)修復(fù)(格式問(wèn)題+代碼質(zhì)量問(wèn)題)
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
// 4. 保存時(shí):觸發(fā) ESLint 格式化器的完整邏輯(補(bǔ)充修復(fù)細(xì)節(jié),與上一條互補(bǔ))
"editor.formatOnSave": true,
// 5. 禁用 Prettier 插件的自動(dòng)功能(雙重保險(xiǎn),避免與 ESLint 沖突)
"prettier.enable": false
}
配置位置說(shuō)明:
- 工作區(qū)配置(推薦):在項(xiàng)目根目錄創(chuàng)建
.vscode/settings.json,僅對(duì)當(dāng)前項(xiàng)目生效; - 全局配置:通過(guò) VSCode 菜單「文件 → 首選項(xiàng) → 設(shè)置 → 打開(kāi)設(shè)置 (JSON)」,對(duì)所有項(xiàng)目生效。
三、VSCode 插件管理:避免工具沖突
1. 必須安裝的插件
- ESLint(作者:Microsoft):執(zhí)行 ESLint 規(guī)則檢查與自動(dòng)修復(fù),是協(xié)同工作的核心插件。
2. 必須禁用的插件
- Prettier - Code formatter(作者:Prettier):原因:項(xiàng)目已通過(guò) ESLint 整合 Prettier 規(guī)則,該插件啟用后可能通過(guò)手動(dòng)操作(如右鍵 “格式化文檔”)觸發(fā)沖突,導(dǎo)致格式來(lái)回切換。操作:在 VSCode 「擴(kuò)展」面板找到該插件,點(diǎn)擊「禁用」(無(wú)需卸載,后續(xù)非項(xiàng)目場(chǎng)景可臨時(shí)啟用)。
四、配置驗(yàn)證:確保 ESLint 與 Prettier 正常配合
完成配置后,通過(guò)以下步驟驗(yàn)證效果:
1. 驗(yàn)證格式化規(guī)則(Prettier 規(guī)則生效)
- 在 Vue 文件(如
App.vue)中寫入不符合 Prettier 規(guī)則的代碼:<template> <div id="app" > <!-- 雙引號(hào)(應(yīng)轉(zhuǎn)為單引號(hào))、多余空格 --> {{ msg }} </div> </template> - 按
Ctrl+S保存文件,觀察代碼是否自動(dòng)修復(fù):- 雙引號(hào)
"app"→ 單引號(hào)'app'(符合.prettierrc.json的singleQuote: true); - 多余空格被刪除(符合 Prettier 默認(rèn)空格規(guī)則)。
- 雙引號(hào)
2. 驗(yàn)證代碼質(zhì)量規(guī)則(ESLint 規(guī)則生效)
- 在 JS 文件(如
main.js)中寫入不符合 ESLint 規(guī)則的代碼:var test = 123; // var 關(guān)鍵字(ESLint 禁止使用 var) console.log(test);
- 按
Ctrl+S保存,觀察代碼是否自動(dòng)修復(fù):var test→let test(符合 ESLint 核心規(guī)則no-var: error);- 若未自動(dòng)修復(fù),執(zhí)行
pnpm lint命令,手動(dòng)觸發(fā)修復(fù)。
3. 驗(yàn)證 Vue 專用規(guī)則(eslint-plugin-vue 生效)
- 在 Vue 組件(如
components/HelloWorld.vue)中寫入不符合 Vue 規(guī)則的代碼:<template> <div>{{ undefinedVar }}</div> <!-- 引用未定義變量 --> </template> - 觀察 VSCode 是否提示錯(cuò)誤(紅色波浪線),執(zhí)行
pnpm lint命令,終端會(huì)報(bào)錯(cuò)提示 “未定義變量”(需手動(dòng)修改代碼解決,ESLint 無(wú)法自動(dòng)修復(fù)邏輯錯(cuò)誤)。
五、常見(jiàn)問(wèn)題與解決方案
| 問(wèn)題現(xiàn)象 | 可能原因 | 解決方案 |
|---|---|---|
| 保存時(shí)雙引號(hào)未轉(zhuǎn)為單引號(hào) | 1. .prettierrc.json 未配置 singleQuote: true;2. VSCode 格式化器未設(shè)為 ESLint | 1. 檢查 .prettierrc.json,確保 singleQuote: true;2. 檢查 settings.json,確保 editor.defaultFormatter 為 dbaeumer.vscode-eslint |
執(zhí)行 pnpm lint 無(wú)反應(yīng) | 1. eslint.config.js 未指定檢查文件;2. 依賴未安裝完整 | 1. 檢查 eslint.config.js 的 files 字段,確保包含 **/*.{js,vue};2. 重新執(zhí)行 pnpm install,確保 eslint-plugin-prettier 已安裝 |
Vue 單單詞組件名(如 index.vue)報(bào)錯(cuò) | eslint.config.js 未關(guān)閉 vue/multi-word-component-names 規(guī)則 | 在 eslint.config.js 的 rules 中添加 "vue/multi-word-component-names": "off" |
六、核心邏輯總結(jié)
ESLint 與 Prettier 完美配合的核心是 “讓 ESLint 接管 Prettier 的格式化工作”,避免工具沖突:
- 規(guī)則來(lái)源:Prettier 格式化規(guī)則寫在
.prettierrc.json,ESLint 代碼質(zhì)量規(guī)則寫在eslint.config.js; - 協(xié)同橋梁:
eslint-plugin-prettier將 Prettier 規(guī)則轉(zhuǎn)為 ESLint 可識(shí)別的錯(cuò)誤,@vue/eslint-config-prettier解決兩者規(guī)則沖突; - 編輯器觸發(fā):VSCode 通過(guò)
settings.json配置,讓保存時(shí)自動(dòng)觸發(fā) ESLint 修復(fù),實(shí)現(xiàn) “格式 + 質(zhì)量” 一鍵搞定。
到此這篇關(guān)于Vue項(xiàng)目中ESLint(代碼質(zhì)量檢查)與Prettier(代碼格式化)配合配置的文章就介紹到這了,更多相關(guān)Vue中ESLint與Prettier配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue項(xiàng)目中使用eslint+prettier規(guī)范與檢查代碼的方法
- 詳解如何在vue項(xiàng)目中使用eslint+prettier格式化代碼
- 實(shí)例詳解Vue項(xiàng)目使用eslint + prettier規(guī)范代碼風(fēng)格
- vue項(xiàng)目中如何配置eslint和prettier
- vue基礎(chǔ)ESLint?Prettier配置教程詳解
- vue3+ts+EsLint+Prettier規(guī)范代碼的方法實(shí)現(xiàn)
- Vite?Vue3?EsLint?Prettier配置步驟極簡(jiǎn)方法詳解
- Vue中使用eslint和prettier格式化代碼方式
相關(guān)文章
vue3+element-plus暗黑模式切換動(dòng)畫圓弧過(guò)渡效果
文章介紹了如何在Vue 3和Element Plus中實(shí)現(xiàn)暗黑模式的切換,并通過(guò)動(dòng)畫和圓弧過(guò)渡效果提升用戶體驗(yàn),本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-01-01
Vue 3自定義指令開(kāi)發(fā)的相關(guān)總結(jié)
這篇文章主要介紹了Vue 3自定義指令開(kāi)發(fā)的相關(guān)總結(jié),幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下2021-01-01
Vue零基礎(chǔ)入門之模板語(yǔ)法與數(shù)據(jù)綁定及Object.defineProperty方法詳解

