<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
VsCode
+ Vue
+ ESLint
+ Prettier
實現 程式碼格式規範 + 儲存自動修復程式碼(js+vue)
先上圖看效果
刪繁就簡,字斟句酌,只寫通俗易懂的文章;
我曾在很長一段時間裡,都沒有搞清楚 ESLint 的正確設定方法。網上的文章質量也是一言難盡,造成了許多的誤導。現在,我理清楚了 ESLint 的設定邏輯。撰寫此文,以作日後查漏補缺之用,也希望能對同樣迷惑的你帶來幫助;
親測,歷經多次測試。不管是在建立新專案,還是改造舊專案時,跟著教學進行設定都是 ok 的;
系統環境:
node.js 版本是:v12.14.0 npm 版本是:6.13.4 vue-cli 版本是:vue/cli 4.5.11
首先安裝兩個 VsCode 外掛
ESLint
Prettier - Code formatter
路徑:組合鍵 ctrl+shift+p
-> 偏好設定:開啟使用者設定
-> 切換到工作區
標籤 -> 滑鼠點選右上角開啟設定(json)
如果編輯器是英文狀態下就是
路徑:組合鍵 ctrl+shift+p
-> Preferences: Open User Settings
-> 切換到Workspace
標籤 -> 滑鼠點選右上角Open Settings(json)
複製貼上下面的 json 程式碼並儲存即可
Workspace(工作區).json
{ // 將prettier設定為預設格式化程式(在編輯器中有可能被其他Formatter佔用,所以將prettier設定為預設Formatter) "editor.defaultFormatter": "esbenp.prettier-vscode", // 儲存時自動格式化 (根據根目錄下‘.prettierrc檔案設定項') "editor.formatOnSave": true, // Enable per-language "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true }, // 為ESLint啟用「儲存時自動修復」,並且仍然具有格式和快速修復功能 "editor.codeActionsOnSave": { "source.fixAll": true, "source.fixAll.eslint": true } }
完整的設定項一共需要下面 6
個 ESLint
相關的外掛
{ ... "devDependencies": { "@vue/cli-plugin-eslint": "~4.5.0", "@vue/eslint-config-prettier": "^6.0.0", "babel-eslint": "^10.1.0", "eslint": "^6.8.0", "eslint-plugin-prettier": "^3.3.1", "eslint-plugin-vue": "^6.2.2" } ... }
如果缺少對應的外掛就在 devDependencies
物件內加上(多餘的 ESLint 外掛可以刪掉)
不要忘記重新 npm install
哦
module.exports = { root: true, env: { node: true, }, extends: [ "plugin:vue/essential", "plugin:vue/recommended", "eslint:recommended", "@vue/prettier", ], parserOptions: { parser: "babel-eslint", }, rules: { "no-console": process.env.NODE_ENV === "production" ? "warn" : "off", "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", }, };
在 vue3.x 版本中,".eslintrc.js" 檔案只有一點不同,其它程式碼都一致。不同處為
module.exports = { ... extends: [ "plugin:vue/vue3-essential", "plugin:vue/vue3-recommended", ], ... };
當然,你的舊專案也有可能把 Eslint 設定寫在了其它檔案裡面,注意檢查衝突
如果同一目錄下有多個組態檔,ESLint 只會使用一個。優先順序如下:
.eslintrc.js
.eslintrc.cjs
.eslintrc.yaml
.eslintrc.yml
.eslintrc.json
package.json
在 vue3.x 中還需要設定 .prettierrc
檔案。在專案根目錄新增,跟.eslintrc.js
檔案同級
為什麼 2.x 版本不需要設定,而 3.x 需要呢?因為 3.x 版本中,ESLint 和 Prettier 會有末尾逗號的衝突。ESLint 預設規則是結尾不加逗號,Prettier 規則結尾要加逗號。程式碼儲存的時候互相打架,誰也不服誰。所以就新增.prettierrc
檔案,設定結尾不加逗號;
{ "trailingComma": "none" }
當然,你若是想要在 vue2.x 版本中設定.prettierrc
,我也攔不住你,純看個人喜好
注意,你的舊專案也有可能把 Prettier 設定寫在了其它檔案裡面,注意檢查衝突
package.json
檔案,改造 lint
為如下程式碼
package.json
"scripts": { "lint": "eslint --fix --ext .js,.vue src/", },
需要進行一鍵修復的時候就執行命令
npm run lint
ESLint 就會自動一件修復專案中所有不符合規則的頁面, 對於不能自動修復的頁面,將在控制檯列印出報錯頁面位置和修復意見,需要自己手動更改
專案龐大、頁面多的的時候,執行 Npm run lint,執行一鍵修復的時間比較久,耐心等待
備註:src/
是將要要進行校驗的程式碼目錄,若想要新增多個目錄,用空格隔開
"package.json" 檔案中新增程式碼
"gitHooks": { "pre-commit": "lint-staged" }, "lint-staged": { "*.{js,jsx,vue}": [ "vue-cli-service lint", "git add" ] }
上面的流程都設定完畢之後,記得重啟編輯器
把下面這段測試程式碼複製到專案中,然後 ctrl+s 儲存,檢測設定是否成功
<template> <div class="testPage"> <div v-for="(item, index) in 10" :key="index" class="test" ref="test" @click="test" > </div> </div> </template> <script> export default { data() { return {}; }, watch: {}, mounted() {}, destroyed() {}, methods: { methods: { test() { ({greeting = "hello", greeted = '"World"', silent = false, onMouseOver,})=> { if(!greeting){return null}; // TODO: Don't use random in render let num = Math.floor (Math.random() * 1E+7).toString().replace(/.d+/ig, "") return <div className='HelloWorld' title={`You are visitor number ${ num }`} onMouseOver={onMouseOver}> <strong>{ greeting.slice( 0, 1 ).toUpperCase() + greeting.slice(1).toLowerCase() }</strong> {greeting.endsWith(",") ? " " : <span style={{color: 'grey'}}>", "</span> } <em> { greeted } </em> { (silent) ? "." : "!"} </div>; } }, }, }, name: "testPage", }; </script>
如果還是設定不成功,檢查下面幾處檔案
User(使用者).json
路徑:組合鍵 ctrl+shift+p
-> 偏好設定:開啟使用者設定
-> 切換到使用者
標籤 -> 滑鼠點選右上角開啟設定(json)
看看有沒有 ESLint 和 Prettier 等設定程式碼,有的話就刪除。下面是我的設定(僅供參考)
{ // 修改多行編輯快捷鍵 "editor.multiCursorModifier": "ctrlCmd", // 以畫素為單位控制字號 "editor.fontSize": 16, // 設定縮排為兩個空格 "editor.tabSize": 2, "explorer.confirmDelete": false, "editor.wordSeparators": "`~!@#$%^&*()=+[{]}\|;:'",.<>/?", // 關閉警告(Vetur在 /xxxx/xxxxxx 中找不到tsconfig.json,jsconfig.json) "vetur.ignoreProjectWarning": true, "security.workspace.trust.untrustedFiles": "open", "terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "icon": "terminal-powershell" }, "Command Prompt": { "path": [ "${env:windir}\Sysnative\cmd.exe", "${env:windir}\System32\cmd.exe" ], "args": [], "icon": "terminal-cmd" }, "Git Bash": { "source": "Git Bash" }, "Windows PowerShell": { "path": "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" } }, "terminal.integrated.defaultProfile.windows": "Windows PowerShell" }
.prettierrc
檢查專案根目錄是否有 .prettierrc
檔案,也許會跟 ESLint 規則衝突,如果出現衝突,自行搜尋檔案解決
{ "endOfLine": "auto" }
.eslintrc.js
.eslintrc.js
檔案同理
package.json
曾經碰到過這樣的一個報錯
npm ERR! code EJSONPARSE
npm ERR! file D:我自己的專案名package.json
npm ERR! JSON.parse Failed to parse json
npm ERR! JSON.parse Unexpected token } in JSON at position 218 while parsing near '... .js,.vue src/",
npm ERR! JSON.parse },
npm ERR! JSON.parse "dependencies"...'
npm ERR! JSON.parse Failed to parse package.json data.
npm ERR! JSON.parse package.json must be actual JSON, not just JavaScript.
檢查發現,結果竟然是 lint 這一行結尾多加了一個逗號,如下所示
"scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "eslint --fix --ext .js,.vue src/", },
你可能會問,為啥沒有自動格式化呢?情景如下
電腦剛拉下來倉庫程式碼;
想執行 npm run serve,結果沒有 node_modules
,無法執行,所以執行 npm install;
之後執行 npm run serve,發現一大片的告警提示(Delete
␍eslint
);
打算進行一鍵修復,又想到沒有做 ESLint 一鍵修復設定,所以想把 npm run lint 加上;
加 lint 的過程中,結尾多了一個逗號,報錯;
重啟編輯器
VsCode 外掛是否禁用
檢查一下兩個外掛,如果禁用請開啟
VsCode 外掛 —— ESLint
VsCode 外掛 —— Prettier - Code formatter
報錯 Delete
␍eslint
有幾種處理方式,目前為止我也沒有得出哪種更好的結論,大家可以各自斟酌
全域性更改 git
在 .prettierrc
設定 "endOfLine": "auto"
建議建立專案初期就使用 ESLint ,否則後期專案日益龐大,免不了會出現許多需要手動優化的語法錯誤,改動起來麻煩
建議程式碼格式規範,在 ESLint 設定初期就定好規則,後面就不要再修改了。避免來回折騰,產生不必要的麻煩(畢竟不是所有的團隊成員都樂於接受這玩意)
如果要在舊專案中新增 ESLint 設定,建議先讓團隊成員把已有程式碼全部都提交到 git 倉庫,然後由一人負責拉取合併程式碼,執行 npm run lint 進行全域性格式化處理以後,再讓團隊成員拉取一次程式碼,再進行後續開發。否則,別人一提交就到處報錯,體驗感很差
建議團隊成員使用同一個 IDE,IDE 建議使用 VScode.本人沒有做過其他 IDE 下的 自動格式化 ESLint 設定,如果需要請自行摸索
以上就是vue基礎ESLint Prettier設定教學詳解的詳細內容,更多關於vue ESLint Prettier設定的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45