代碼規范之-理解ESLint、Prettier、EditorConfig

前言

? ? ? ?團隊多人協同開發項目,困擾團隊管理的一個很大的問題就是:無可避免地會出現每個開發者編碼習慣不同、代碼風格迥異,為了代碼高可用、可維護性,需要從項目管理上盡量統一和規范代碼。理想的方式需要在項目工程化方面,借助可靈活配置的工具自動化解決。

? ? ? ?而現在無論是開源項目還是成熟的團隊項目,根目錄下出現了越來越多的配置文件,這是前端項目在快速演變、逐漸完善健壯的一種表現,那面對這些配置文件,如果是一臉懵的狀態,傻傻分不清楚不太行。

? ? ?本篇文章便來介紹跟編碼風格、代碼規范相關的幾個場景的配置功能:

? ? ?ESLint、Prettier、EditorConfig

? ? ?借助于EditorConfig+Prettier+ESLint 的組合,項目中通過統一約定配置,可以在團隊成員在代碼開發過程中就檢查、約束、美化代碼,統一編碼風格;且可以省去很多的溝通成本,提前暴露代碼缺陷,減少后期二次修改代碼的風險。

EditorConfig

EditorConfig包含的內容比較少,主要是配置我們的編輯器,編寫代碼時的簡單規則,不足以滿足項目更多需求;

ESLint

ESLint 是一個在 JavaScript 代碼中通過規則模式匹配作代碼識別和報告的插件化的檢測工具,它的目的是保證代碼規范的一致性和及時發現代碼問題、提前避免錯誤發生。
ESLint 的關注點是代碼質量,檢查代碼風格并且會提示不符合風格規范的代碼。除此之外 ESLint 也具有一部分代碼格式化的功能。

Lint發展歷程

ESLint最初是由Nicholas C. Zakas ( JavaScript 高級程序設計 作者)于2013年6月創建的開源項目。它的目標是提供一個插件化的javascript代碼檢測工具。

JavaScript發展歷程中出現的Lint工具:JSLint->JSHint->ESLint/TSLint;

JSLint是最早出現的 Lint 工具,不支持靈活拓展及配置,必須接受它所有規則;JSHint 在 JSLint 的基礎上提供了一定的配置項,給了開發者較大的自由,但無法添加自定義規則;

Zakas創建ESLint的初衷就是覺得當時的JSHint存在局限性,無法添加自定義規則。

ES6的出現后則讓ESLint迅速大火。因為ES6新增了很多語法,JSHint 短期內無法提供支持,而 ESLint 只需要有合適的解析器以及拓展校驗規則 就能夠進行 Lint 檢查。此時babel就為兼容ESLint開發了 babel-eslint解析器,提供支持的同時也讓ESLint成為最快支持 ES6 語法的 Lint 工具。

關于TSLint(已停止維護)

但自2019 年 1 月起,根據 TSLint 的官方聲明,TSLint 正在慢慢被廢棄,并會逐步遷移到 ESLint作為代碼檢查的工具。至于停止維護的原因:一是ESLint社區更活躍、越來越完善,且社區對ESLint的擁護聲浪越來越高,相反TSLint則完善度不夠;二是在持續迭代、支持新特性的過程中發現TSLint 的規則運作方式存在架構性的性能問題,相反的 ESLint 則具有更高效能的架構。

支持的配置文件格式:

JavaScript- 使用 .eslintrc.js 然后輸出一個配置對象。

YAML?- 使用 .eslintrc.yaml 或 .eslintrc.yml 去定義配置的結構。

JSON?- 使用 .eslintrc.json 去定義配置的結構,ESLint 的 JSON 文件允許 JavaScript 風格的注釋。

(棄用)?- 使用 .eslintrc,可以使 JSON 也可以是 YAML。

package.json?- 在 package.json 里創建一個 eslintConfig屬性,在那里定義你的配置。如果同一個目錄下有多個配置文件,ESLint 只會使用一個。優先級順序如下:

.eslintrc.js

.eslintrc.yaml

.eslintrc.yml

.eslintrc.json

.eslintrc

package.json

遇到項目內有多個層疊配置時,采用就近原則作為高優先級;

Prettier

Prettier是一個誕生于2016年就迅速流行起來的專注于代碼格式化的工具。出道即巔峰。Prettier只關注格式化,并不具有lint檢查語法等能力。它通過解析代碼并匹配自己的一套規則,來強制執行一致的代碼展示格式。它在美化代碼方面有很大的優勢,配合ESLint可以對ESLint格式化基礎上做一個很好的補充。

VSCode內置的代碼格式化工具可以指定為由Prettier接管,此時右下角會顯示為Prettier。可以自行配置格式化觸發機制:換行時格式化、保存文件時格式化、還是自行快捷鍵觸發;

配置項

在VSCode 首選項-設置-擴展.settings.json中更改通用配置;

在具體項目根目錄設置.prettierrc.js單獨配置;

module.exports = {// 一行最多 120 字符printWidth: 120,// 使用 2 個空格縮進tabWidth: 2,// 不使用縮進符,而使用空格useTabs: false,// 行尾需要有分號semi: false,// 使用單引號singleQuote: true,// 對象的 key 僅在必要時用引號quoteProps: 'as-needed',// jsx 不使用單引號,而使用雙引號jsxSingleQuote: false,// 末尾需要有逗號trailingComma: 'none',// 大括號內的首尾需要空格bracketSpacing: true,// jsx 標簽的反尖括號需要換行jsxBracketSameLine: false,// 箭頭函數,只有一個參數的時候,也需要括號arrowParens: 'always',// 每個文件格式化的范圍是文件的全部內容rangeStart: 0,rangeEnd: Infinity,// 不需要寫文件開頭的 @prettierrequirePragma: false,// 不需要自動在文件開頭插入 @prettierinsertPragma: false,// 使用默認的折行標準proseWrap: 'preserve',// 根據顯示樣式決定 html 要不要折行htmlWhitespaceSensitivity: 'css',// vue 文件中的 script 和 style 內不用縮進vueIndentScriptAndStyle: false,// 換行符使用 lfendOfLine: 'lf',// 格式化嵌入的內容embeddedLanguageFormatting: 'auto',// html, vue, jsx 中每個屬性占一行singleAttributePerLine: false
}

格式化的生效策略同樣是就近原則,一步步匹配目標文件最近父目錄的配置文件,越近優先級越高。

總結

1、在代碼格式化時采用Perttier規則,在代碼校驗時使用ESLint

2、遇到項目內有多個層疊配置時,采用就近原則作為高優先級

3、ESLint等解決的是團隊開發規范的問題,并不能解決其他諸如編碼能力、代碼合理性等問題, 還屬于工程化中比較弱的一環。

  • EditorConfig 是用來抹平編輯器差異的,比如文件編碼,鎖進格式等
  • ESLint 關注于代碼質量校驗 和 代碼格式校驗,配合插件支持autoFix和錯誤提示,完全可插拔
  • Prettier Prettier只關注代碼格式,也支持自動修復,規則和ESLint不同

Q&A

如何解決Prettier與ESLint的配置沖突問題?

解決方式一:要么修改 eslintrc,要么修改 prettierrc 配置,讓它們配置保持一致;

解決方式二:禁用 ESLint中和Prettier配置有沖突的規則;再使用 Prettier 來替代 ESLint 的格式化功能;

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

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

相關文章

Kafka官方生產者和消費者腳本簡單使用

問題 怎樣使用Kafka官方生產者和消費者腳本進行消費生產和消費?這里假設已經下載了kafka官方文件,并已經解壓. 生產者配置文件 producer_hr.properties bootstrap.servers10.xx.xx.xxx:9092,10.xx.xx.xxx:9092,10.xx.xx.xxx:9092 compression.typenone security.protocolS…

部署jekins遇到的問題

jdk問題 我用的jdk版本是21的結果版本太新了,啟動jekins服務的時候總是報錯最后在jekins的安裝目錄下面的jekinsErr.log查看日志發現是jdk問題最后換了一個17版本的就解決了。 unity和jekins jekins和Git源碼管理 jekins和Git聯動使用 我想讓jekins每次打包的時…

【css/vue】使用css變量,在同一個頁面根據不同情況改變字號等樣式

解決方法是&#xff1a;將 css 的屬性使用 v-bind 與 Vue 組件的屬性綁定&#xff0c;當組件的屬性變化時&#xff0c;css 對應的屬性值也就會隨之變化&#xff1b; 具體實現代碼&#xff1a; <template><div><span class"navTitle">標題名</s…

3D電路板在線渲染案例

從概念上講,這是有道理的,因為PCB印制電路板上的走線從一個連接到下一個連接的路線基本上是平面的。 然而,我們生活在一個 3 維世界中,能夠以這種方式可視化電路以及相應的組件,對于設計過程很有幫助。本文將介紹KiCad中基本的3D查看功能,以及如何使用NSDT 3DConvert在線…

Day38力扣打卡

打卡記錄 網格中的最小路徑代價&#xff08;動態規劃&#xff09; 鏈接 class Solution:def minPathCost(self, grid: List[List[int]], moveCost: List[List[int]]) -> int:m, n len(grid), len(grid[0])f [[0x3f3f3f3f3f] * n for _ in range(m)]f[0] grid[0]for i i…

【洛谷 B2010】帶余除法 題解(順序結構+四則運算)

帶余除法 題目描述 給定被除數和除數&#xff0c;求整數商及余數。此題中請使用默認的整除和取余運算&#xff0c;無需對結果進行任何特殊處理。 輸入格式 一行&#xff0c;包含兩個整數&#xff0c;依次為被除數和除數&#xff08;除數非零&#xff09;&#xff0c;中間用…

Sentinel 授權規則 (AuthorityRule)

Sentinel 是面向分布式、多語言異構化服務架構的流量治理組件&#xff0c;主要以流量為切入點&#xff0c;從流量路由、流量控制、流量整形、熔斷降級、系統自適應過載保護、熱點流量防護等多個維度來幫助開發者保障微服務的穩定性。 SpringbootDubboNacos 集成 Sentinel&…

一分鐘快速了解Python3.12新特性

Python 3.12&#xff0c;作為Python編程語言的最新穩定版&#xff0c;引入了一系列對語言和標準庫的改變&#xff0c;發布于2023年10月2日。重點變化包括&#xff1a; 新語法特性: PEP 695 引入類型形參語法和 type 語句&#xff0c;允許創建更明確的泛型類和函數。PEP 701 改進…

Unity 三維場景的搭建 軟件構造實驗報告

實驗2&#xff1a;仿真系統功能實現 1.實驗目的 &#xff08;1&#xff09;熟悉在Unity中設置仿真場景&#xff1b; &#xff08;2&#xff09;熟悉在Unity中C#語言的使用&#xff1b; &#xff08;3&#xff09;熟悉仿真功能的實現。 2.實驗內容 新建一個仿真場景&#x…

SpringBoot_websocket實戰

SpringBoot_websocket實戰 前言1.websocket入門1.1 websocket最小化配置1.1.1 后端配置1.1.2 前端配置 1.2 websocket使用sockjs1.2.1 后端配置1.2.2 前端配置 1.3 websocket使用stomp協議1.3.1 后端配置1.3.2 前端配置 2.websocket進階2.1 websocket與stomp有什么區別2.2 webs…

思維模型 重疊效應

本系列文章 主要是 分享 思維模型 &#xff0c;涉及各個領域&#xff0c;重在提升認知。相似內容易被混淆或遺忘。 1 重疊效應的應用 1.1 重疊效應在教育中的應用 1 通過避免重疊效應提升學習效率 為了避免重疊效應&#xff0c;通過對比、歸納等方法來幫助學生更好地理解和掌…

黑馬React18: Redux

黑馬React: Redux Date: November 19, 2023 Sum: Redux基礎、Redux工具、調試、美團案例 Redux介紹 Redux 是React最常用的集中狀態管理工具&#xff0c;類似于Vue中的Pinia&#xff08;Vuex&#xff09;&#xff0c;可以獨立于框架運行 作用&#xff1a;通過集中管理的方式管…

VPS配置了swap沒發揮作用怎么辦

1 swap配置了但沒用上 我的服務器內存是2G&#xff0c;裝多一點東西就不夠用&#xff0c;于是我給他分配了2G的swap&#xff0c;等了幾小時&#xff0c;swap還是一點都沒有使用 Linux中Swap&#xff08;即&#xff1a;交換分區&#xff09;&#xff0c;類似于Windows的虛擬內存…

MongoDB的常用操作以及python連接MongoDB

一,MongoDB的啟動 mongod --dbpath..\data\db mongodb注意同時開兩個窗口&#xff0c;不要關&#xff01; 二, MongoDB的簡單使用 簡單介紹一下mongoDB中一些操作 show dbs: 顯示所有數據庫 show databases: 顯示所有數據庫 use xxxx: 使用指定數據庫/創建數據庫&#xff08…

Linux 與大型機 z/OS

大型機 國際商業機器公司&#xff08;International Business Machine Corporation&#xff09;&#xff0c;簡稱為 IBM&#xff0c;實際上是當今大型機的代名詞。作為大型企業技術解決方案提供商&#xff0c;IBM 在其漫長的生命周期中生產了各種產品。 他們的前身是計算、制表…

時序預測 | MATLAB實現基于BiLSTM-AdaBoost雙向長短期記憶網絡結合AdaBoost時間序列預測

時序預測 | MATLAB實現基于BiLSTM-AdaBoost雙向長短期記憶網絡結合AdaBoost時間序列預測 目錄 時序預測 | MATLAB實現基于BiLSTM-AdaBoost雙向長短期記憶網絡結合AdaBoost時間序列預測預測效果基本介紹模型描述程序設計參考資料 預測效果 基本介紹 1.Matlab實現BiLSTM-Adaboost…

【精選】Ajax技術知識點合集

Ajax技術詳解 Ajax簡介 Ajax 即“Asynchronous Javascript And XML”&#xff08;異步 JavaScript 和 XML&#xff09;&#xff0c;是指一種創建 交互式、快速動態應用的網頁開發技術&#xff0c;無需重新加載整個網頁的情況下&#xff0c;能夠更新頁面局 部數據的技術。通過在…

Scala如何寫一個通用的游戲數據爬蟲程序

以前想要獲取一些網站數據的時候&#xff0c;都是通過人工手動復制粘貼&#xff0c;這樣的效率及其低下。數據少無所謂&#xff0c;如果需要采集大量數據&#xff0c;手動就顯得乏力了。半夜睡不著&#xff0c;爬起來寫一段有關游戲商品數據的爬蟲通用模板&#xff0c;希望能幫…

專業pdf編輯工具PDF Expert mac中文版特點介紹

PDF Expert mac是一款專業的PDF編輯和閱讀工具。它可以幫助用戶在Mac、iPad和iPhone等設備上查看、注釋、編輯、填寫和簽署PDF文檔。 PDF Expert mac軟件特點 PDF編輯&#xff1a;PDF Expert提供了豐富的PDF編輯功能&#xff0c;包括添加、刪除、移動、旋轉、縮放、裁剪等操作…

基于順序表實現通訊錄

1.功能實現 功能要求 1&#xff09;至少能夠存儲100個人的通訊信息 2&#xff09;能夠保存用戶信息&#xff1a;名字、性別、年齡、電話、地址等 3&#xff09;增加聯系人信息 4&#xff09;刪除指定聯系人 5&#xff09;查找制定聯系人 6&#xff09;修改指定聯系人 7&#xf…