Vue?CLI項(xiàng)目遷移eslint報(bào)錯(cuò)解決辦法及最佳實(shí)踐
1.問(wèn)題產(chǎn)生
在GitHub上找到一個(gè)Vue2后臺(tái)管理模板后,我將業(yè)務(wù)代碼(約100多個(gè)文件)整合到該模板中。運(yùn)行項(xiàng)目時(shí),ESLint報(bào)出了大量錯(cuò)誤(2481個(gè)錯(cuò)誤和345個(gè)警告)。雖然項(xiàng)目可以正常運(yùn)行,但這些錯(cuò)誤提示嚴(yán)重影響開(kāi)發(fā)體驗(yàn)。

2.解決方案
1. eslint自動(dòng)修復(fù)
1.1 package.json 中定義的一個(gè) npm 腳本命令
** package.json**
"scripts": {
"lint": "eslint --ext .js,.vue src",
},
- eslint 是 ESLint 的命令行工具,負(fù)責(zé)執(zhí)行代碼檢查。
- –ext .js,.vue 指定 ESLint 檢查的文件類(lèi)型,這里設(shè)置為檢查 .js 和 .vue 文件。
- src 是目標(biāo)文件夾,表示 ESLint 將檢查 src 目錄中的所有文件。
1.2 運(yùn)行 npm 腳本命令
# --fix 是 ESLint 的一個(gè)參數(shù),表示自動(dòng)修復(fù)那些可以修復(fù)的代碼問(wèn)題。 npm run lint -- --fix
執(zhí)行 npm run lint – --fix 時(shí),ESLint 會(huì):
- 檢查 src 目錄下的 .js 和 .vue 文件。
- 根據(jù) ESLint 配置,自動(dòng)修復(fù)一些可以自動(dòng)修復(fù)的代碼問(wèn)題(如格式化、刪除多余的空格、調(diào)整括號(hào)位置等)
- 對(duì)于那些不能自動(dòng)修復(fù)的問(wèn)題(如邏輯錯(cuò)誤或未定義的變量),ESLint 會(huì)輸出警告或錯(cuò)誤提示。

- 執(zhí)行效果:
- 自動(dòng)修復(fù)了大部分可修復(fù)的格式問(wèn)題
- 錯(cuò)誤和警告數(shù)量顯著減少
- 無(wú)法自動(dòng)修復(fù)的問(wèn)題會(huì)明確顯示在控制臺(tái)
2. eslint手動(dòng)修復(fù)
error Expected '===' and instead saw '==' eqeqeq error Elements in iteration expect to have 'v-bind:key' directives vue/require-v-for-key
2.1 按照?qǐng)?bào)錯(cuò)提示逐步解決錯(cuò)誤
自動(dòng)修復(fù)后,仍需要手動(dòng)處理以下類(lèi)型的問(wèn)題:
error Expected '===' and instead saw '==' eqeqeq # 比如這個(gè)報(bào)錯(cuò)解決方法,就是對(duì)應(yīng)的代碼吧 '==' 換成 '==='
2.2 通過(guò) 改 eslint配置
找到.eslintrc.js文件。(我的項(xiàng)目是eslintrc.js,你們項(xiàng)目可能對(duì)應(yīng)json)
{
// "error":當(dāng)代碼違反此規(guī)則時(shí),ESLint 會(huì)報(bào)錯(cuò)
// "always":要求始終使用嚴(yán)格相等運(yùn)算符(=== 和 !==),而不是寬松相等運(yùn)算符(== 和 !=)
eqeqeq: ["error", "always", { null: "ignore" }],
// eslint報(bào)錯(cuò) 主要有三種級(jí)別:"off", "warn", 和 "error"
// 如果想關(guān)閉就:
// eqeqeq: ["off", "always", { null: "ignore" }],
}
如果對(duì)eslint配置不熟悉,可以去通過(guò)搜索了解。這里主要提供思路。
3 思考
為什么不是所有報(bào)錯(cuò)和警告都解決??
ESLint 自動(dòng)修復(fù)(--fix)是有限制的,只有一些特定的類(lèi)型問(wèn)題才能被自動(dòng)修復(fù),下面是常見(jiàn)的自動(dòng)修復(fù)和手動(dòng)修復(fù)問(wèn)題。
eslint 修復(fù)的問(wèn)題
一、 eslint可自動(dòng)修復(fù)的問(wèn)題
- 格式化問(wèn)題:
- 空格和縮進(jìn)問(wèn)題:例如,2個(gè)空格 vs 4個(gè)空格。
- 行末分號(hào):自動(dòng)添加或刪除缺少的分號(hào)。
- 換行符問(wèn)題:例如在不同的操作系統(tǒng)之間(Windows 的 CRLF 和 Unix 的 LF)。
- 單引號(hào) vs 雙引號(hào):會(huì)根據(jù)配置修復(fù)引號(hào)的使用方式(例如強(qiáng)制使用單引號(hào) ’ 還是雙引號(hào) ")
- 簡(jiǎn)單語(yǔ)法調(diào)整:
- 冗余的 return 語(yǔ)句:如果一個(gè)函數(shù)只包含一個(gè) return 語(yǔ)句
- 優(yōu)化的導(dǎo)入語(yǔ)句:自動(dòng)調(diào)整 import 和 export 語(yǔ)句的順序。
- 不必要的括號(hào):例如在箭頭函數(shù)中,如果參數(shù)只有一個(gè)并且沒(méi)有默認(rèn)值
二、 需手動(dòng)修復(fù)的問(wèn)題
- 邏輯錯(cuò)誤和潛在問(wèn)題:
- 條件語(yǔ)句中的邏輯錯(cuò)誤:例如 if (x = 1)(錯(cuò)誤的賦值運(yùn)算符)是一個(gè)潛在的邏輯錯(cuò)誤。
- 變量未使用:如果有未使用的變量,ESLint 會(huì)警告
- 語(yǔ)法錯(cuò)誤:
- 不匹配的括號(hào)、花括號(hào)等:如果括號(hào)沒(méi)有正確關(guān)閉,ESLint 無(wú)法修復(fù)這些問(wèn)題。
- 缺少依賴:如果有一些規(guī)則要求你引入特定的庫(kù)
強(qiáng)制執(zhí)行的業(yè)務(wù)規(guī)則
- 自定義規(guī)則:如果項(xiàng)目中使用了自定義的 ESLint 插件或規(guī)則。
- 文件名、命名規(guī)范:例如,強(qiáng)制文件名使用小寫(xiě),或者強(qiáng)制特定的命名規(guī)則(如 camelCase)。
三、自動(dòng)修復(fù) vs 手動(dòng)修復(fù)
| 問(wèn)題類(lèi)型 | 自動(dòng)修復(fù) | 手動(dòng)修復(fù) | 示例規(guī)則 |
|---|---|---|---|
| 分號(hào)/逗號(hào) | ? | ? | semi, comma-dangle |
| 引號(hào)/空格 | ? | ? | quotes, indent |
| 簡(jiǎn)單格式問(wèn)題 | ? | ? | keyword-spacing |
| Vue組件屬性順序 | ? | ? | vue/order-in-components |
| 未使用變量 | ? | ? | no-unused-vars |
| 代碼邏輯錯(cuò)誤 | ? | ? | no-undef |
| 規(guī)則配置沖突 | ? | ? | Prettier vs ESLint |
| 復(fù)雜重構(gòu) | ? | ? | max-lines, complexity |
最佳實(shí)踐操作流程
1.通過(guò)系統(tǒng)性的ESLint錯(cuò)誤修復(fù)流程:
- 首先運(yùn)行
npm run lint -- --fix解決可自動(dòng)修復(fù)的問(wèn)題 - 根據(jù)控制臺(tái)提示手動(dòng)修復(fù)剩余錯(cuò)誤
- 合理調(diào)整ESLint配置,適應(yīng)項(xiàng)目需求
- 建立預(yù)防機(jī)制,在編碼過(guò)程中實(shí)時(shí)檢查
2.最佳實(shí)踐建議:

3.預(yù)防性措施
VS Code自動(dòng)修復(fù)配置:
{ "editor.codeActionsOnSave": { "source.fixAll.eslint": true } }Git提交前檢查(husky配置):
"husky": { "hooks": { "pre-commit": "npm run lint" } }
總結(jié)
到此這篇關(guān)于Vue CLI項(xiàng)目遷移eslint報(bào)錯(cuò)解決辦法及最佳實(shí)踐的文章就介紹到這了,更多相關(guān)Vue CLI項(xiàng)目遷移eslint報(bào)錯(cuò)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用this.$router.go(-1)遇到的一些問(wèn)題及解決
這篇文章主要介紹了使用this.$router.go(-1)遇到的一些問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
vue+axios實(shí)現(xiàn)文件上傳的實(shí)時(shí)進(jìn)度條
最近用vue寫(xiě)上傳的時(shí)候,遇到一個(gè)需求就是頁(yè)面上展示上傳的進(jìn)度條,之后寫(xiě)過(guò)一次,但是用的是假交互,直接從0-100,今天分享一下用axios自帶的onUploadProgress來(lái)完成這個(gè)小需求,感興趣的朋友可以參考下2024-01-01
vue實(shí)現(xiàn)移動(dòng)端touch拖拽排序
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)移動(dòng)端touch拖拽排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
當(dāng)vue路由變化時(shí),改變導(dǎo)航欄的樣式方法
今天小編就為大家分享一篇當(dāng)vue路由變化時(shí),改變導(dǎo)航欄的樣式方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
vue中選項(xiàng)卡點(diǎn)擊切換且能滑動(dòng)切換功能的實(shí)現(xiàn)代碼
本文通過(guò)實(shí)例代碼給大家介紹了vue中選項(xiàng)卡點(diǎn)擊切換且能滑動(dòng)切換功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下2018-11-11
vue中router.beforeEach()的簡(jiǎn)單用法舉例
router.beforeEach()一般用來(lái)做一些進(jìn)入頁(yè)面的限制,比如沒(méi)有登錄,就不能進(jìn)入某些頁(yè)面,只有登錄了之后才有權(quán)限查看某些頁(yè)面,下面這篇文章主要給大家介紹了關(guān)于vue中router.beforeEach()的簡(jiǎn)單用法舉例,需要的朋友可以參考下2023-01-01
利用FetchEventSource在大模型流式輸出的應(yīng)用方式
這篇文章主要介紹了利用FetchEventSource在大模型流式輸出的應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Element?UI中v-infinite-scroll無(wú)限滾動(dòng)組件使用詳解
在移動(dòng)端數(shù)據(jù)的更新中許多方法孕育而生,無(wú)限滾輪也是解決的方案一種,Element-ui為vue開(kāi)發(fā)了一個(gè)事件(v-infinite-scroll),下面這篇文章主要給大家介紹了關(guān)于Element?UI中v-infinite-scroll無(wú)限滾動(dòng)組件使用的相關(guān)資料,需要的朋友可以參考下2023-02-02

