Vue 前端代碼規范實戰:ESLint v9、Prettier 與 Stylelint 集成指南與最佳實踐

🚀 作者主頁: 有來技術
🔥 開源項目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template
🌺 倉庫主頁: GitCode︱ Gitee ︱ Github
💖 歡迎點贊 👍 收藏 ?評論 📝 如有錯誤敬請糾正!

目錄

    • 前言
    • 集成 ESLint
      • 安裝插件
      • 配置 ESLint
      • 快速初始化
      • 定制化配置
      • 添加 ESLint 運行腳本
      • 測試 ESLint
    • 集成 Prettier
      • 安裝插件
      • 安裝依賴
      • 配置 Prettier
      • 配置忽略文件
      • 添加格式化腳本
      • 保存自動格式化
      • 測試 Prettier
    • 集成 Stylelint
      • 安裝插件
      • 安裝依賴
      • 配置 Stylelint
      • 配置忽略文件
      • 添加 Stylelint 腳本
      • 保存自動修復
      • 測試 Stylelint
    • 結語

前言

本指南以開源項目 vue3-element-admin 的 Vue3 + TypeScript 技術棧為基礎,提供 2025 年前端開發中 ESLint V9、Prettier 和 Stylelint 的最新配置與最佳實踐,幫助開發者快速集成工具,提升團隊協作效率和代碼質量。

集成 ESLint

ESLint 是一款 JavaScript 和 TypeScript 的代碼規范工具,能夠幫助開發團隊保持代碼風格一致并減少常見錯誤。

ESLint 中文網:https://eslint.nodejs.cn/

安裝插件

VSCode 插件市場搜索 ESLint 插件并安裝

在這里插入圖片描述

配置 ESLint

快速初始化

按照 ESLint 官方指南,可以使用以下命令快速生成 ESLint 配置文件:

npm init @eslint/config@latest

運行該命令后,ESLint 將通過交互式問答的方式,幫助安裝相關依賴并生成默認配置文件 eslint.config.js

默認生成的配置如下:

import globals from "globals";
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
import pluginVue from "eslint-plugin-vue";/** @type {import('eslint').Linter.Config[]} */
export default [{files: ["**/*.{js,mjs,cjs,ts,vue}"]},{languageOptions: { globals: globals.browser }},pluginJs.configs.recommended,...tseslint.configs.recommended,...pluginVue.configs["flat/essential"],{files: ["**/*.vue"], languageOptions: {parserOptions: {parser: tseslint.parser}}},
];

定制化配置

由于項目使用了 Vue 3 和 TypeScript,我們需要在默認配置的基礎上進行調整,以適配當前項目。首先,安裝必要的 ESLint 依賴:

pnpm add -D eslint-plugin-vue vue-eslint-parser eslint-config-prettier eslint-plugin-prettier 
依賴作用
eslint-plugin-vue提供 Vue 相關的 ESLint 規則
vue-eslint-parser解析 .vue 文件
eslint-config-prettier關閉與 Prettier 沖突的 ESLint 規則
eslint-plugin-prettier將 Prettier 作為 ESLint 規則進行檢測

以下是優化后的 eslint.config.js 配置,涵蓋了 JavaScript、TypeScript 和 Vue 代碼的檢查規則,并集成了 Prettier 進行代碼格式化。

// https://eslint.nodejs.cn/docs/latest/use/configure/configuration-filesimport globals from "globals";
import pluginJs from "@eslint/js"; // JavaScript 規則
import pluginVue from "eslint-plugin-vue"; // Vue 規則
import pluginTypeScript from "@typescript-eslint/eslint-plugin"; // TypeScript 規則import parserVue from "vue-eslint-parser"; // Vue 解析器
import parserTypeScript from "@typescript-eslint/parser"; // TypeScript 解析器import configPrettier from "eslint-config-prettier"; // 禁用與 Prettier 沖突的規則
import pluginPrettier from "eslint-plugin-prettier"; // 運行 Prettier 規則/** @type {import('eslint').Linter.Config[]} */
export default [// 指定檢查文件和忽略文件{files: ["**/*.{js,mjs,cjs,ts,vue}"],ignores: ["**/*.d.ts"],},// 全局配置{languageOptions: {globals: {...globals.browser,...globals.node// 添加自定義的類型//  PageQuery: "readonly"},},plugins: { prettier: pluginPrettier },rules: {...configPrettier.rules, // 關閉與 Prettier 沖突的規則...pluginPrettier.configs.recommended.rules, // 啟用 Prettier 規則"prettier/prettier": "error", // 強制 Prettier 格式化"no-unused-vars": ["error",{argsIgnorePattern: "^_", // 忽略以 _ 開頭的變量未使用警告varsIgnorePattern: "^[A-Z0-9_]+$", // 忽略變量名為大寫字母、數字或下劃線組合的未使用警告(枚舉定義未使用場景)ignoreRestSiblings: true, // 忽略解構賦值中同級未使用變量的警告},],},},// JavaScript 配置pluginJs.configs.recommended,// TypeScript 配置{files: ["**/*.ts"],ignores: ["**/*.d.ts"], // 排除d.ts文件languageOptions: {parser: parserTypeScript,parserOptions: {sourceType: "module",},},plugins: { "@typescript-eslint": pluginTypeScript },rules: {...pluginTypeScript.configs.strict.rules, // TypeScript 嚴格規則"@typescript-eslint/no-explicit-any": "off", // 允許使用 any"@typescript-eslint/no-empty-function": "off", // 允許空函數"@typescript-eslint/no-empty-object-type": "off", // 允許空對象類型},},// Vue 配置{files: ["**/*.vue"],languageOptions: {parser: parserVue,parserOptions: {parser: parserTypeScript,sourceType: "module",},},plugins: { vue: pluginVue, "@typescript-eslint": pluginTypeScript },processor: pluginVue.processors[".vue"],rules: {...pluginVue.configs["vue3-recommended"].rules, // Vue 3 推薦規則"vue/no-v-html": "off", // 允許 v-html"vue/multi-word-component-names": "off", // 允許單個單詞組件名},},
];

添加 ESLint 運行腳本

為了方便使用 ESLint,我們可以在 package.json 中添加 lint 腳本:

{"scripts": {"lint:eslint": "eslint --cache  \"src/**/*.{vue,ts}\" --fix",}
}

該命令會自動修復符合 ESLint 規則的代碼問題,并輸出檢查結果。

測試 ESLint

App.vue 文件中添加一個未使用的變量,并運行以下命令:

pnpm run lint:eslint

集成 Prettier

Prettier 是一個代碼格式化工具,能夠和 ESLint 配合使用,確保代碼風格統一。

prettier 中文網:https://prettier.nodejs.cn/

安裝插件

VSCode 插件市場搜索 Prettier - Code formatter 插件安裝

安裝依賴

pnpm install -D prettier eslint-config-prettier eslint-plugin-prettier 
  • prettier:主要的 Prettier 格式化庫。
  • eslint-config-prettier:禁用 ESLint 中與 Prettier 沖突的規則。
  • eslint-plugin-prettier:將 Prettier 的規則作為 ESLint 的規則來運行。

配置 Prettier

參考 Prettier 官方配置文檔 在項目根目錄下新建配置文件 .prettierrc.yaml,用于定義代碼格式化規則。我們選擇 YAML 格式,原因如下:

  1. JSON 文件不支持注釋,不利于配置的說明和維護。
  2. JS 文件在某些情況下配置可能不生效(例如,測試發現 printWidth: 100 仍會按默認值 80 換行),可能是優先級問題,建議進一步驗證。

以下是推薦的基礎配置,供參考使用:

# 每行最多字符數量,超出換行(默認80)
printWidth: 100
# 縮進空格數,默認2個空格
tabWidth: 2
# 指定縮進方式,空格或tab,默認false,即使用空格
useTabs: false
# 使用分號
semi: true
# 使用單引號 (true:單引號;false:雙引號)
singleQuote: false
# 末尾使用逗號
trailingComma: all

配置忽略文件

項目根目錄新建 .prettierignore 文件指定 Prettier 不需要格式化的文件和文件夾

# .prettierignore
node_modules
dist
public
*.min.js

添加格式化腳本

package.json 文件中添加:

{"scripts": {"lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,css,scss,vue,html,md}\""}
}

保存自動格式化

打開 VSCode 的 FilePreferencesSettings,然后選擇 Open Settings (JSON),添加以下配置

{"editor.formatOnSave": true, // 保存格式化文件"editor.defaultFormatter": "esbenp.prettier-vscode" // 指定 prettier 為所有文件默認格式化器
}

測試 Prettier

下圖演示了保存時的自動格式化效果,展示了代碼中引號和換行的自動調整:

在這里插入圖片描述

集成 Stylelint

Stylelint 一個強大的 CSS linter(檢查器),可幫助您避免錯誤并強制執行約定。

Stylelint 官網:https://stylelint.io/

安裝插件

VSCode 插件搜索 Stylelint 并安裝

安裝依賴

pnpm install -D postcss postcss-html postcss-scss stylelint stylelint-config-recommended stylelint-config-recommended-scss stylelint-config-recommended-vue stylelint-config-recess-order stylelint-config-html stylelint-prettier
依賴說明備注
postcssCSS 解析工具,允許使用現代 CSS 語法并將其轉換為兼容的舊語法-
postcss-html解析 HTML (類似 HTML) 的 PostCSS 語法參見 postcss-html 文檔
postcss-scssPostCSS 的 SCSS 解析器參見 postcss-scss 文檔,支持 CSS 行類注釋
stylelintstylelint 核心庫參見 stylelint
stylelint-config-recommended提供了基礎的 Stylelint 配置,適用于大多數項目,允許自定義規則集與 stylelint-config-standard 相比,此配置提供了更多的靈活性
stylelint-config-recommended-scss擴展基礎配置,為 SCSS 特定規則提供支持參見 stylelint-config-recommended-scss 文檔
stylelint-config-recommended-vue擴展基礎配置,為 Vue 文件中的樣式提供支持參見 stylelint-config-recommended-vue 文檔
stylelint-config-recess-order提供優化樣式順序的配置參見 CSS 書寫順序規范
stylelint-config-html為 HTML (類似 HTML) 文件提供共享配置參見 stylelint-config-html 文檔
stylelint-prettier統一代碼風格,格式沖突時以 Prettier 規則為準參見 stylelint-prettier

其中選擇 stylelint-config-recommended 替代 stylelint-config-standard 的原因在于它不僅提供了靈活性,還更加輕量。stylelint-config-recommended 默認包含的規則較少,避免了 stylelint-config-standard 中可能不需要的規則,這樣可以減少配置的復雜度,提高項目的啟動速度,同時讓開發者能夠集中關注對項目真正重要的風格指南。輕量配置有助于簡化工作流程,特別是在大型或復雜的項目中。

配置 Stylelint

根目錄新建 .stylelintrc.cjs 文件,配置如下:

{"extends": ["stylelint-config-recommended","stylelint-config-recommended-scss","stylelint-config-recommended-vue/scss","stylelint-config-html/vue","stylelint-config-recess-order"],"plugins": ["stylelint-prettier"],"overrides": [{"files": ["**/*.{vue,html}"],"customSyntax": "postcss-html"},{"files": ["**/*.{css,scss}"],"customSyntax": "postcss-scss"}],"rules": {"import-notation": "string","selector-class-pattern": null,"custom-property-pattern": null,"keyframes-name-pattern": null,"no-descending-specificity": null,"no-empty-source": null,"selector-pseudo-class-no-unknown": [true,{"ignorePseudoClasses": ["global", "export", "deep"]}],"unit-no-unknown": [true, {"ignoreUnits": ["rpx"]}]   "property-no-unknown": [true,{"ignoreProperties": []}],"at-rule-no-unknown": [true,{"ignoreAtRules": ["apply", "use", "forward"]}]}
}

配置忽略文件

根目錄創建 .stylelintignore 文件,配置忽略文件如下:

*.min.js
dist
public
node_modules

添加 Stylelint 腳本

package.json 添加 Stylelint 檢測指令:

  "scripts": {"lint:stylelint": "stylelint  \"**/*.{css,scss,vue,html}\" --fix"}

保存自動修復

項目根目錄下.vscode/settings.json 文件添加配置:

{"editor.codeActionsOnSave": {"source.fixAll.stylelint": true },"stylelint.validate": ["css", "scss", "vue", "html"]
}

為了驗證把尺寸屬性 width 放置在定位屬性 position 前面,根據 CSS 書寫順序規范 推斷是不符合規范的,在保存時 Stylelint 自動將屬性重新排序,達到預期。

在這里插入圖片描述

測試 Stylelint

執行以下命令進行檢測

npm run lint:stylelint

在這里插入圖片描述

結語

通過集成 ESLint、Prettier 和 Stylelint,您的項目將實現代碼規范與風格的高度統一,提升開發效率和代碼質量。這些工具的結合不僅能夠自動檢測和修復代碼問題,還能確保團隊協作中的一致性,減少溝通成本。隨著項目的迭代,持續優化配置并遵循最佳實踐,將為您的團隊帶來更高效的開發體驗,同時為項目的長期維護打下堅實的基礎。讓我們以規范為基石,以工具為助力,共同打造高質量的代碼!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907741.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907741.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907741.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker docker-ce docker.io

Ubuntu安裝 ??更新軟件包列表?? 首先確保軟件包列表是最新的: sudo apt-get update 使用正確的卸載命令?? 替換 docker-engine 為 docker-ce 或 docker.io: sudo apt-get remove docker docker-ce docker.io containerd runc ??檢查已安裝的 Do…

C++ 初階 | 類和對象易錯知識點(下)

目錄 0.引言 1.初始化列表 2.static 靜態成員變量: 靜態成員函數: 3.友元函數 4.內部類 定義: 特點: 應用: 5.優化寫法 6.例題 求和12...n (不能用for/while/if/else等關鍵字) 7.總結 0.引言 今天&…

使用yocto搭建qemuarm64環境

環境 yocto下載 # 源碼下載 git clone git://git.yoctoproject.org/poky git reset --hard b223b6d533a6d617134c1c5bec8ed31657dd1268 構建 # 編譯鏡像 export MACHINE"qemuarm64" . oe-init-build-env bitbake core-image-full-cmdline 運行 # 跑虛擬機 export …

AWS WebRTC:獲取ICE服務地址(part 3):STUN服務和TURN服務的作用

STUN服務和TURN服務的作用: 服務全稱作用是否中繼流量適用場景STUNSession Traversal Utilities for NAT 協助設備發現自己的公網地址(srflx candidate) ? 不中繼,僅輔助NAT 穿透成功時使用TURNTraversal Using Relays around N…

分析XSSstrike源碼

#用于學習web安全自動化工具# 我能收獲什么? 1.XSS漏洞檢測機制 學習如何構造和發送XSS payload如何識別響應中的回顯,WAF,過濾規則等如何使用詞典,編碼策略,上下文探測等繞過過濾器 2.Python安全工具開發技巧 使…

npm run build 報錯:Some chunks are larger than 500 KB after minification

當我們的 Vue 項目太大,使用 npm run build 打包項目的時候,就有可能會遇到以下報錯: (!) Some chunks are larger than 500 kB after minification. Consider: - Using dynamic import() to code-split the application - Use build.rollup…

【LLM相關知識點】關于LLM項目實施流程的簡單整理(一)

【LLM相關知識點】關于LLM項目實施流程的簡單整理(一) 文章目錄 【LLM相關知識點】關于LLM項目實施流程的簡單整理(一)零、學習計劃梳理:結合ChatGPT從零開始學習LLM & 多模態大模型一、大模型相關應用場景和頭部企…

海上石油鉆井平臺人員安全管控解決方案

一、行業挑戰與需求分析 海上鉆井平臺面臨復雜環境風險(如易燃易爆、金屬干擾、極端氣象)和人員管理難題(如定位模糊、應急響應延遲)。傳統RFID或藍牙定位技術存在精度不足(1-5米)、抗干擾能力差等問題&am…

@Docker Compose 部署 Pushgateway

文章目錄 Docker Compose 部署 Pushgateway1. 目的2. 適用范圍3. 先決條件4. 部署步驟4.1 創建項目目錄4.2 創建 docker-compose.yml 文件4.3 啟動 Pushgateway 服務4.4 驗證服務運行狀態4.5 測試 Pushgateway 訪問 5. 配置 Prometheus 采集 Pushgateway 數據6. 日常維護6.1 查…

項目 react+taro 編寫的微信 小程序,什么命令,可以減少console的顯示

在 Taro 項目中,為了減少 console 的顯示(例如 console.log、console.info 等),可以通過配置 terser-webpack-plugin 來移除生產環境中的 console 調用。 配置步驟: 修改 index.js 文件 在 mini.webpackChain 中添加 …

Java開發中常見的數值處理陷阱與規避方法

八進制字面量的誤用問題 歷史背景與語法特性 由于歷史原因,Java保留了八進制字面量的支持。八進制字面量以數字0開頭,例如037表示十進制數31(計算方式:38 + 7 = 31)。這種表示法在現代編程中極少使用,唯一合理的應用場景是表示Unix文件權限(如0644表示用戶可讀寫,組和…

Lua5.4.2常用API整理記錄

一、基礎函數 1.type(value)?? 返回值的類型(如 "nil", "number", "string", "table", "function" 等)。 代碼測試: a 0 print(type(a)) a nil print(type(a)) a "aaaaaaaa&…

2025.5.29 學習日記 docker概念以及基本指令

Docker: Docker 是一種開源的容器化平臺,用于快速部署應用程序,實現開發、測試和生產環境的一致性。 一、Docker 核心概念 鏡像(Image) 只讀的模板文件,用于創建容器,類似虛擬機的鏡像&#x…

明遠智睿SSD2351開發板:語音機器人領域的變革力量

在人工智能快速發展的今天,語音機器人逐漸成為人們生活和工作中的得力助手。明遠智睿SSD2351開發板憑借強大性能與豐富功能,為語音機器人的發展注入新動力,成為該領域的變革力量。 SSD2351開發板的四核1.4GHz處理器具備強勁的運算性能&#x…

嵌入式學習筆記 - keil安裝目錄下的頭文件自動包含問題

Keil MDK/MDK-ARM(ARM編譯器)默認情況下會自動包含其安裝目錄下的標準頭文件路徑(如CMSIS庫、設備頭文件等)。具體機制如下: ?默認自動包含?: 新建工程或使用設備數據庫選擇芯片型號后,Keil會…

什么是數據驅動?以及我們應如何理解數據驅動?

在談到企業數字化轉型時,很多人都會說起“數據驅動”,比如“數據驅動運營”、“數據驅動業務”等等。 在大家言必稱“數據驅動”的時代背景下,我相信很多人并未深究和思考“數據驅動”的真正含義,只是過過嘴癮罷了。那么&#xff…

C++中全局變量和局部變量的區別

C中全局變量和局部變量的區別 在C(以及其他編程語言)中,變量的作用域和生命周期是兩個非常重要的概念。全局變量和局部變量在作用域和生命周期上有顯著的區別。下面我將詳細講解全局變量和局部變量的區別,并通過代碼示例來幫助理…

基于RPA技術的ECRobot企業智能體解決方案,打通企業自動化業務流程的最后一公里

在企業的日常運營中,難免會遇到一些繁瑣且重復的任務,這類高頻次、低復雜度的事務性工作往往造成人力資源和成本的浪費。因此如何通過智能化工具實現流程自動化,已經成為企業數字化轉型進程中的共性課題。 RPA技術:自動化賦能企業…

ipv6與p2p的關系

在PCDN(P2P內容分發網絡)領域,IPv6與PCDN盒子的關系緊密且相互影響,主要體現在以下幾個方面: 一、IPv6的部署推動PCDN盒子普及 地址資源充足 IPv6采用128位地址,解決了IPv4地址枯竭的問題,為PC…

大模型應用開發之預訓練

預訓練是研發大語言模型的第一個訓練階段,通過在大規模語料上進行預訓練,大語言模型可以獲得通用的語言理解與生成能力,掌握較為廣泛的世界知識,具備解決眾多下游任務的性能潛力 一、數據預處理 1. 數據的收集 1)通…