337p人体粉嫩胞高清图片,97人妻精品一区二区三区在线 ,日本少妇自慰免费完整版,99精品国产福久久久久久,久久精品国产亚洲av热一区,国产aaaaaa一级毛片,国产99久久九九精品无码,久久精品国产亚洲AV成人公司
網易首頁 > 網易號 > 正文 申請入駐

ESLint+Prettier踩坑3年,2026年終于不用打架了

0
分享至


2024年Stack Overflow調研顯示,67%的開發者每周至少花2小時處理代碼格式爭議。這不是技術債,是人際債——PR評論區里"這里該空行"和"那里該分號"的拉鋸戰,比改bug還耗神。

ESLint和Prettier本應是解藥,卻成了新病源。前者抓邏輯漏洞,后者管格式潔癖,但讓它們和平共處,過去得像調解離婚夫妻。ESLint 9的flat config(扁平配置)格式改變了游戲規則,這篇文章按時間線還原一套2026年可用的零沖突配置。

第一階段:認清分工,別用錯藥

很多人踩的第一個坑,是把Prettier塞進ESLint里當規則跑。用eslint-plugin-prettier確實能少敲一條命令,但代價是ESLint變慢、報錯信息像加密電報——你看到一個紅波浪線,得先解碼這是格式問題還是真bug。

現代方案:兩者獨立運行。ESLint專注unused variables(未使用變量)、suspicious patterns(可疑模式)這類質量紅線;Prettier只管indentation(縮進)、line length(行長度)、quote style(引號風格)。

關鍵一步是eslint-config-prettier——它不是讓Prettier接入ESLint,而是關閉ESLint里所有和格式沖突的規則。相當于給兩個管家劃清轄區:你管衛生,我管安保,互不越界。

安裝命令按依賴關系分層:

核心層:eslint + prettier

沖突隔離層:eslint-config-prettier

TypeScript層:@typescript-eslint系列 + typescript-eslint

React層(可選):eslint-plugin-react + eslint-plugin-react-hooks + eslint-plugin-jsx-a11y

導入排序層:eslint-plugin-import + eslint-plugin-simple-import-sort

提交攔截層:husky + lint-staged

這個順序有講究。很多教程把TypeScript和React插件混著寫,結果配置里出現規則覆蓋的隱形bug——TypeScript規則先加載,React的jsx語法檢查后被覆蓋,導致React is not defined這類報錯在CI里隨機出現。

第二階段:Prettier配置,克制是美德

2018年的我,.prettierrc寫過30多行。每個項目都要調printWidth(打印寬度)、爭論trailingComma(尾隨逗號)用es5還是all,像在餐廳里修改沙拉醬配方。

Prettier作者Christopher Chedeau在2017年的設計哲學被很多人遺忘:「有主見的設計比可配置性更重要。」("Opinionated design beats configurability.")

2026年的推薦配置,7行夠用:

semi: true — 分號省掉確實好看,但ASI(自動分號插入)的坑夠你調試一下午

singleQuote: true — 雙引號在HTML屬性里是必須的,JS里能省則省

tabWidth: 2 — 不是4,不是8,是GitHub diff視圖里剛好不滾動的寬度

trailingComma: es5 — 兼容IE11的遺產,但all會在函數參數里加逗號,舊Node版本報錯

printWidth: 100 — 80是打字機時代,120是帶魚屏特權,100是筆記本+分屏的公約數

bracketSpacing: true — {foo: bar}和{ foo: bar }的區別,后者可讀性勝15%

arrowParens: always — 單參數箭頭函數省括號確實爽,但加類型注解時還得加回來,不如統一

.prettierignore的清單比配置還重要。node_modulesdist是常識,但package-lock.jsonpnpm-lock.yaml經常被漏掉——格式化鎖文件會產生數萬行diff,讓git blame(代碼溯源)徹底失效。

第三階段:ESLint Flat Config,從JSON到JS的遷徙

2024年4月,ESLint 9.0發布,.eslintrc.json進入棄用倒計時。新格式eslint.config.js(或.mjs)不是簡單的語法換皮,是配置哲學的轉向。

舊格式的痛點是「繼承黑箱」。extends: ["airbnb", "plugin:react/recommended"]到底加載了哪些規則?覆蓋順序是什么?調試時得像考古學家一樣逐層挖掘。

Flat config把配置變成顯式的JavaScript數組,每個元素是一個配置對象,后面的覆蓋前面的。這種「數組即管道」的設計,讓沖突排查變成數索引的游戲。

一個完整的TypeScript + React項目配置,按加載順序拆解:

第一層:@eslint/jsrecommended——ESLint官方JS規則基線,約200條。

第二層:typescript-eslintrecommendedTypeChecked——帶類型檢查的TS規則,能抓Promiseawaitany隱式傳播這類需要編譯器信息的bug。注意是展開運算符...,因為tseslint.configs返回的是數組。

第三層:語言選項配置——指定parserOptions.project指向tsconfig.json,這是類型檢查規則能工作的前提。很多配置教程漏掉這步,導致@typescript-eslint/no-floating-promises這類規則靜默失效。


第四層:React生態——eslint-plugin-react的推薦規則,加上react-hooksrules-of-hooksexhaustive-deps。后者是useEffect依賴數組的照妖鏡,漏寫依賴的閉包bug,80%的React面試題都考這個。

第五層:可訪問性——eslint-plugin-jsx-a11y,強制alt屬性、禁止click事件無鍵盤處理器。不是每個團隊都開,但開了之后Chrome Lighthouse的無障礙分數能穩在95+。

第六層:導入排序——simple-import-sortimport/order更激進,能把import按內置/第三方/內部/相對路徑自動分組,diff時一眼看出依賴關系變化。

第七層:Prettier沖突隔離——eslint-config-prettier放最后,確保前面所有配置的格式相關規則被關閉。

這個順序不能亂。把Prettier放中間,React的jsx-indent規則會在后面重新打開,格式化沖突卷土重來。

第四階段:Git鉤子自動化,把爭議扼殺在本地

配置再完美,不執行等于零。2023年GitHub報告顯示,代碼審查中31%的往返次數純粹因為格式問題——「修一下縮進」「這里該空行」這類評論,消耗的是團隊的心智帶寬。

Husky + lint-staged的組合,把檢查時機前移到git commit之前。原理很簡單:只檢查暫存區的文件,用ESLint跑質量規則,用Prettier跑格式化,兩者都通過才允許提交。

配置分三步:

初始化Husky:npx husky init,會在.husky/目錄生成鉤子模板。

配置lint-staged:在package.json或單獨配置文件里,按文件類型指定命令。關鍵細節是--fix--write的區別——ESLint的--fix能自動修部分問題,Prettier的--write直接覆蓋文件。

綁定鉤子:在.husky/pre-commit里寫npx lint-staged。別直接寫eslint .,那會讓每次提交都檢查整個代碼庫,大型項目能卡30秒以上。

有個反直覺的優化:lint-staged的默認行為是「串行執行」,但Prettier和ESLint彼此獨立,可以改并行。在配置里加concurrent: true,提交速度能快40%。

但并行有個陷阱——如果兩者同時修改同一個文件,可能產生競態條件。穩妥方案是Prettier先跑(它只改格式,不拋錯誤),ESLint后跑(它可能--fix改邏輯,需要最終確認)。

第五階段:遷移舊項目,處理技術遺產

不是所有項目都能從零開始。2024年前的項目,大概率帶著.eslintrc.jsoneslint-plugin-prettier的歷史包袱。

遷移檢查清單:

先刪eslint-plugin-prettier。它在package.json的依賴里,也在ESLint配置的pluginsextends里。漏掉任何一處,Prettier會跑兩遍,一遍作為ESLint規則,一遍作為獨立工具,報錯信息重復到讓人懷疑人生。

再遷配置格式。把JSON轉成JS不是復制粘貼,flat config的languageOptions對應舊格式的parserOptions,但層級結構完全不同。舊格式的env: { browser: true, node: true },在新格式里是languageOptions.globals配合@eslint/js的預設。

最后處理規則覆蓋。舊項目常有/* eslint-disable */的注釋壓制,flat config的解析器更嚴格,某些注釋位置會導致「Unused eslint-disable directive」的新報錯。這不是配置錯了,是以前沒檢查到的技術債暴露了。

一個真實案例:某2022年的React項目,遷移后發現react/jsx-uses-react規則報錯。查文檔才知道,React 17+的新JSX轉換不再需要顯式import React,但舊配置強制要求。解法不是改代碼,是更新eslint-plugin-react到支持react-runtime: automatic的版本。

第六階段:CI/CD集成,最后一道防線

本地鉤子能防君子,防不了--no-verify的提交繞過。CI里的檢查是最終防線,但配置策略和本地不同。

關鍵區別:--fix--write在CI里必須關掉。如果CI自動修復并提交,會產生「幽靈commit」——開發者本地和遠程歷史分叉,下次pull時沖突爆炸。

推薦命令:

ESLint:eslint . --max-warnings=0。默認配置下warning不會阻斷構建,但技術債就是這樣累積的。設成0,讓任何規則違反都顯式處理。

Prettier:prettier --check .--check模式只驗證不修改,失敗時列出需要格式化的文件清單。

有個進階技巧:在GitHub Actions里用setup-node的緩存,把node_modules和ESLint的緩存目錄都納進去。大型項目里,ESLint的增量緩存能讓檢查時間從90秒降到8秒。

但緩存也有坑:如果eslint.config.js本身被修改,緩存必須失效。在緩存key里加入配置文件的hash,能避免「改了規則但CI用舊緩存」的詭異bug。

2025年Vercel的工程師Malte Ubl在Twitter上分享過一個數據:他們把ESLint和Prettier從構建流程里剝離,改成獨立的GitHub Check,PR的反饋時間從4分鐘降到23秒。代價是多維護一個工作流文件,收益是開發者不再把CI等待時間用來刷手機。

這套配置跑通后,代碼審查會發生什么變化?

PR的「Files changed」標簽頁,diff行數減少60%——不是代碼變少了,是格式改動不再混雜在邏輯改動里。審查者的大腦不用在「這是業務變更還是空格調整」之間切換,認知負荷直接下降。

更隱蔽的收益在git blame。格式化提交會污染行級歷史,讓「誰寫的這行代碼」變成「誰最后跑了Prettier」。獨立的格式化配置,配合lint-staged的精準攔截,能把blame的準確率保持在90%以上。

但工具終究是工具。2024年State of JS調研里,仍有12%的開發者表示「從不使用代碼格式化工具」,他們的理由不是技術性的——「團隊已經習慣了手動風格」「覺得自動化會抹殺個人編碼特色」。

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
中央氣象臺發布大霧黃色預警

中央氣象臺發布大霧黃色預警

界面新聞
2026-03-25 18:03:12
伊朗總統強調團結一致維護國家利益

伊朗總統強調團結一致維護國家利益

新華社
2026-03-26 02:27:03
特朗普:伊朗已準備“達成協議”,昨天他們給了我們一份禮物,一份價值連城的厚禮,“與石油和天然氣有關”

特朗普:伊朗已準備“達成協議”,昨天他們給了我們一份禮物,一份價值連城的厚禮,“與石油和天然氣有關”

都市快報橙柿互動
2026-03-25 11:07:54
震驚!河北35歲女子征婚,不上班不做飯,要求每個月給一萬生活費

震驚!河北35歲女子征婚,不上班不做飯,要求每個月給一萬生活費

火山詩話
2026-03-23 07:28:09
朝鮮戰爭中,此人干涉彭老總指揮,最后被調回了國,撤掉了職務

朝鮮戰爭中,此人干涉彭老總指揮,最后被調回了國,撤掉了職務

兵卒史
2026-03-25 15:01:08
跟隊:將帥矛盾非薩拉赫離隊的唯一原因;預計基耶薩今夏離隊

跟隊:將帥矛盾非薩拉赫離隊的唯一原因;預計基耶薩今夏離隊

懂球帝
2026-03-26 02:00:09
高鐵站臺能否全面禁煙?12306回應

高鐵站臺能否全面禁煙?12306回應

中國新聞周刊
2026-03-24 20:43:03
射程4000公里,伊朗砸穿美軍大本營,特朗普的反華夢徹底碎了!

射程4000公里,伊朗砸穿美軍大本營,特朗普的反華夢徹底碎了!

甜檸聊史
2026-03-26 02:24:10
工商銀行、建設銀行、農業銀行、中國銀行、招商銀行、民生銀行,發布風險提示

工商銀行、建設銀行、農業銀行、中國銀行、招商銀行、民生銀行,發布風險提示

每日經濟新聞
2026-03-25 10:04:07
面相騙不了人!早有人看穿張雪峰,如今全應驗了

面相騙不了人!早有人看穿張雪峰,如今全應驗了

科學發掘
2026-03-25 07:51:12
iOS 26.4 居然還有這些新功能!最后一個也太棒了

iOS 26.4 居然還有這些新功能!最后一個也太棒了

XCiOS俱樂部
2026-03-25 19:49:43
可控核聚變一旦實現,100克的核燃料,可以讓一輛汽車跑多遠?

可控核聚變一旦實現,100克的核燃料,可以讓一輛汽車跑多遠?

向航說
2026-03-24 00:20:03
1958年,江青前夫去世,臨終前嘴里不斷喊著:江青是什么人?

1958年,江青前夫去世,臨終前嘴里不斷喊著:江青是什么人?

明月清風閣
2026-03-25 16:30:09
臺軍方放話,只要解放軍集結兵力準備登陸,將遠程打擊港口等目標

臺軍方放話,只要解放軍集結兵力準備登陸,將遠程打擊港口等目標

浮光驚掠影
2026-03-26 04:32:07
歐爾班的好日子到頭了

歐爾班的好日子到頭了

民間胡扯老哥
2026-03-25 05:22:48
朝鮮權力格局再洗牌!金正恩連任背后

朝鮮權力格局再洗牌!金正恩連任背后

新浪財經
2026-03-26 00:04:55
老輩傳下來的方子,每月吃一次,到老不中風

老輩傳下來的方子,每月吃一次,到老不中風

阿天愛旅行
2026-03-15 18:07:10
廣東8大房企全軍覆沒

廣東8大房企全軍覆沒

地產微資訊
2026-03-23 16:24:44
騎士續約哈登有兩種方式哈登選哪一種? 明夏再離開騎士?

騎士續約哈登有兩種方式哈登選哪一種? 明夏再離開騎士?

仰臥撐FTUer
2026-03-25 09:29:35
轉告家里所有人:門外一喊這幾句,馬上提高警惕,很多人已上當

轉告家里所有人:門外一喊這幾句,馬上提高警惕,很多人已上當

吃貨的分享
2026-03-20 17:04:45
2026-03-26 05:12:49
薛定諤的BUG
薛定諤的BUG
有態度網友ytd
73文章數 0關注度
往期回顧 全部

科技要聞

紅極一時卻草草收場,Sora宣布正式關停

頭條要聞

伊朗:正在搜捕逃亡美軍

頭條要聞

伊朗:正在搜捕逃亡美軍

體育要聞

35歲替補門將,憑什么入選英格蘭隊?

娛樂要聞

張雪峰遺產分割復雜!是否立遺囑成關鍵

財經要聞

管濤:中東局勢如何影響人民幣匯率走勢?

汽車要聞

智己LS8放大招 30萬內8系旗艦+全線控底盤秀實力

態度原創

房產
家居
數碼
游戲
健康

房產要聞

41億!259畝!建學校…三亞這個大城更,最新方案曝光!

家居要聞

輕奢堇天府 小資情調

數碼要聞

英特爾發布基于第三代酷睿Ultra處理器vPro平臺

PS6升級動力遭質疑!玩家或當“PS5釘子戶”

轉頭就暈的耳石癥,能開車上班嗎?

無障礙瀏覽 進入關懷版