日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Eslint團(tuán)隊(duì)終于妥協(xié)了...

來源: 責(zé)編: 時(shí)間:2023-10-31 10:26:19 336觀看
導(dǎo)讀大家好,我卡頌。配置過代碼格式化的同學(xué)一定糾結(jié)過如下問題:Eslint和Prettier都能格式化代碼風(fēng)格,是單用Eslint,還是兩個(gè)一起用呢?從今以后,你再也不用糾結(jié)這個(gè)問題,因?yàn)镋slint團(tuán)隊(duì)已經(jīng)妥協(xié)了 —— 根據(jù)官方博客[1]所說,從v8.

hl528資訊網(wǎng)——每日最新資訊28at.com

大家好,我卡頌。hl528資訊網(wǎng)——每日最新資訊28at.com

配置過代碼格式化的同學(xué)一定糾結(jié)過如下問題:Eslint和Prettier都能格式化代碼風(fēng)格,是單用Eslint,還是兩個(gè)一起用呢?hl528資訊網(wǎng)——每日最新資訊28at.com

從今以后,你再也不用糾結(jié)這個(gè)問題,因?yàn)镋slint團(tuán)隊(duì)已經(jīng)妥協(xié)了 —— 根據(jù)官方博客[1]所說,從v8.53.0起,Eslint中「代碼風(fēng)格相關(guān)規(guī)則」將被棄用。hl528資訊網(wǎng)——每日最新資訊28at.com

有意思的是,造成上述局面的原因并不是技術(shù)問題導(dǎo)致的,更多是市場(chǎng)行為。hl528資訊網(wǎng)——每日最新資訊28at.com

本文讓我們聊聊事情的來龍去脈。hl528資訊網(wǎng)——每日最新資訊28at.com

Eslint的崛起

在2013年之前,前端工程師通常使用JSLint或JSHint作為「代碼檢查器」,用以檢測(cè):hl528資訊網(wǎng)——每日最新資訊28at.com

代碼質(zhì)量問題

比如:應(yīng)該避免使用 eval(),應(yīng)該使用===而不是==...hl528資訊網(wǎng)——每日最新資訊28at.com

代碼中的錯(cuò)誤

比如:未定義的變量、類型轉(zhuǎn)換的問題...hl528資訊網(wǎng)——每日最新資訊28at.com

其中,JSLint基于內(nèi)部實(shí)現(xiàn)的JS解析器,對(duì)生成的token流(詞法單元流)進(jìn)行分析,檢查代碼語(yǔ)法。hl528資訊網(wǎng)——每日最新資訊28at.com

JSHint是從JSLint派生出來的,他們工作原理類似,但JSHint更靈活 —— 他提供了.jshintrc配置文件方便開發(fā)者自定義規(guī)則。hl528資訊網(wǎng)——每日最新資訊28at.com

上述兩個(gè)工具都能檢查代碼,但由于實(shí)現(xiàn)原理的限制,沒法進(jìn)行復(fù)雜的規(guī)則檢查。同時(shí),他們對(duì)「代碼風(fēng)格」的檢查也較少。hl528資訊網(wǎng)——每日最新資訊28at.com

在這一時(shí)期,「代碼風(fēng)格檢查」(比如:縮進(jìn)、行長(zhǎng)度、引號(hào)類型、是否在語(yǔ)句末尾使用分號(hào)...)主要交給JSCS。hl528資訊網(wǎng)——每日最新資訊28at.com

2013年,Eslint問世。他將代碼解析為AST并分析:hl528資訊網(wǎng)——每日最新資訊28at.com

  • 相比于JSHint或JSLint的實(shí)現(xiàn),AST保留了更多代碼上下文信息。

所以,Eslint不僅可以進(jìn)行更復(fù)雜的規(guī)則校驗(yàn),還能讓開發(fā)者以插件的形式自己編寫規(guī)則。hl528資訊網(wǎng)——每日最新資訊28at.com

  • 相比于JSCS,Eslint支持「代碼自動(dòng)修復(fù)」

所以,Eslint不僅能對(duì)代碼風(fēng)格提出建議,還能自動(dòng)修復(fù)「不符合規(guī)范的風(fēng)格」。hl528資訊網(wǎng)——每日最新資訊28at.com

更先進(jìn)的功能,再加上作者身份加持(作者是紅寶書作者),使得Eslint逐漸淘汰了上述競(jìng)品。hl528資訊網(wǎng)——每日最新資訊28at.com

Eslint與Prettier之爭(zhēng)

雖然Eslint提供了大量規(guī)則,但并不是所有開發(fā)者都想配置一套自己的規(guī)則集。hl528資訊網(wǎng)——每日最新資訊28at.com

慢慢的,一些「Eslint規(guī)則集的最佳實(shí)踐」被提出(比如Airbnb規(guī)則[2]、standard規(guī)則[3])。hl528資訊網(wǎng)——每日最新資訊28at.com

開發(fā)者通常會(huì)在這些規(guī)則集的基礎(chǔ)上再做些個(gè)性化修改,組成項(xiàng)目的lint規(guī)則集。hl528資訊網(wǎng)——每日最新資訊28at.com

這些規(guī)則集中,通常包含三類規(guī)則:hl528資訊網(wǎng)——每日最新資訊28at.com

  • 代碼質(zhì)量檢查
  • 代碼錯(cuò)誤檢查
  • 代碼風(fēng)格檢查

其中「代碼風(fēng)格檢查」通常是非常主觀的。如果團(tuán)隊(duì)成員的「代碼風(fēng)格檢查規(guī)則」配置不一樣,很影響提交時(shí)git diff的可讀性。hl528資訊網(wǎng)——每日最新資訊28at.com

為了強(qiáng)制規(guī)范「代碼風(fēng)格檢查」,Prettier出現(xiàn)了。這是一款「固執(zhí)己見」的代碼風(fēng)格格式化工具,他集成了一套代碼風(fēng)格,并且可配置程度不高。hl528資訊網(wǎng)——每日最新資訊28at.com

「可配置程度不高」是一把雙刃劍,一方面,他能強(qiáng)制規(guī)范團(tuán)隊(duì)成員的代碼風(fēng)格。hl528資訊網(wǎng)——每日最新資訊28at.com

但另一方面,如果想對(duì)代碼風(fēng)格做些個(gè)性化設(shè)置,Prettier很有可能不支持。hl528資訊網(wǎng)——每日最新資訊28at.com

舉個(gè)例子(來自為什么我不使用 Prettier中的例子),Prettier中通過printWidth屬性配置「一行可以顯示的字符數(shù)」,超過就會(huì)折行。hl528資訊網(wǎng)——每日最新資訊28at.com

有時(shí)候我們并不需要「超過某個(gè)字符數(shù)就折行」,因?yàn)樵贕it Diff時(shí),折行會(huì)破壞Diff信息的可讀性:hl528資訊網(wǎng)——每日最新資訊28at.com

hl528資訊網(wǎng)——每日最新資訊28at.com

然而遺憾的是,Prettier并沒有提供配置關(guān)閉這一行為。hl528資訊網(wǎng)——每日最新資訊28at.com

基于上述原因,出現(xiàn)了兩種解決方案:hl528資訊網(wǎng)——每日最新資訊28at.com

方案1  Eslint與Prettier配合使用

其中Eslint負(fù)責(zé)代碼質(zhì)量、錯(cuò)誤檢查,Prettier負(fù)責(zé)代碼風(fēng)格檢查。優(yōu)點(diǎn)是能夠滿足代碼質(zhì)量、風(fēng)格檢查。缺點(diǎn)是:hl528資訊網(wǎng)——每日最新資訊28at.com

  • Eslint與Prettier規(guī)則可能沖突,配置成本高。
  • 代碼風(fēng)格檢查的可配置性低(Prettier配置性低)。

案2 只使用Eslint

使用「代碼風(fēng)格相關(guān)規(guī)則的集合」,比如@stylistic/eslint-plugin-js[4]管理代碼風(fēng)格。再使用其他規(guī)則管理代碼質(zhì)量。hl528資訊網(wǎng)——每日最新資訊28at.com

這種方式優(yōu)點(diǎn)明顯 —— 可配置性高,且配置簡(jiǎn)單(只需要配置Eslint)。hl528資訊網(wǎng)——每日最新資訊28at.com

顯然,方案2是優(yōu)于方案1的。既然如此,Eslint團(tuán)隊(duì)為什么要棄用所有「代碼風(fēng)格相關(guān)規(guī)則」呢?hl528資訊網(wǎng)——每日最新資訊28at.com

Eslint團(tuán)隊(duì)的妥協(xié)

設(shè)想一下,每當(dāng)出現(xiàn)新的語(yǔ)言特性,與該特性相關(guān)的規(guī)則包括:hl528資訊網(wǎng)——每日最新資訊28at.com

  • 少量的代碼質(zhì)量相關(guān)規(guī)則
  • 少量的代碼錯(cuò)誤相關(guān)規(guī)則
  • 各種奇怪的代碼風(fēng)格規(guī)則

顯然前兩者的優(yōu)先級(jí)、重要性都高于第三者。如果說,在Eslint成長(zhǎng)初期,為了收割JSCS的用戶,Eslint必須實(shí)現(xiàn)所有「JSCS支持的代碼風(fēng)格規(guī)則」,此時(shí)實(shí)現(xiàn)各種代碼風(fēng)格規(guī)則是必要的。hl528資訊網(wǎng)——每日最新資訊28at.com

但今時(shí)今日,Eslint早已成為JS領(lǐng)域「代碼檢查器」的老大,不需要再為了市場(chǎng)份額努力滿足社區(qū)的一切需要。況且,有些時(shí)候,考慮「規(guī)則沖突」以及「一致性」,有些需求甚至無法滿足。hl528資訊網(wǎng)——每日最新資訊28at.com

規(guī)則沖突

最理想的情況,所有核心規(guī)則都能很好地相互配合,這意味著沒有兩個(gè)規(guī)則應(yīng)該標(biāo)記同一個(gè)問題,也不會(huì)有任何兩個(gè)核心規(guī)則給出相互沖突的建議。hl528資訊網(wǎng)——每日最新資訊28at.com

當(dāng)核心規(guī)則少于30條時(shí),這很容易。但對(duì)于越來越多的規(guī)則,這很難做到。hl528資訊網(wǎng)——每日最新資訊28at.com

一致性問題

ESLint規(guī)則之間是無法互相訪問的。這意味著我們會(huì)遇到無法正確修復(fù)錯(cuò)誤的問題,因?yàn)樾畔⒖赡芪挥诹硪粋€(gè)規(guī)則中。hl528資訊網(wǎng)——每日最新資訊28at.com

舉個(gè)例子,如果自動(dòng)修復(fù)需要添加新的代碼行,就需要知道文件是如何縮進(jìn)的,以便應(yīng)用正確的修復(fù)。但是,規(guī)則indent控制ESLint的縮進(jìn),這意味著其他規(guī)則需要在不縮進(jìn)的情況下應(yīng)用修復(fù),然后相信indent規(guī)則將在后續(xù)傳遞中修復(fù)縮進(jìn)。hl528資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

ESLint從v8.53.0起,將棄用「代碼風(fēng)格相關(guān)規(guī)則」。這么做主要是因?yàn)槔^續(xù)維護(hù)「代碼風(fēng)格相關(guān)規(guī)則」對(duì)核心團(tuán)隊(duì)來說,投入產(chǎn)出比太低。hl528資訊網(wǎng)——每日最新資訊28at.com

試想一下,核心團(tuán)隊(duì)花費(fèi)大力氣解決問題(規(guī)則沖突、一致性問題),推出新的「代碼風(fēng)格規(guī)則」,開發(fā)者會(huì)感謝Eslint核心團(tuán)隊(duì)的付出么?hl528資訊網(wǎng)——每日最新資訊28at.com

不會(huì)的,這些「代碼風(fēng)格規(guī)則」會(huì)被集成到規(guī)則集中,并被冠以「某種開發(fā)理念」兜售給開發(fā)者(比如Airbnb規(guī)范)。hl528資訊網(wǎng)——每日最新資訊28at.com

實(shí)際收獲名利的是站在臺(tái)前的「宣傳開發(fā)理念的團(tuán)隊(duì)」,而背后辛苦干活的Eslint核心團(tuán)隊(duì)往往被忽略了,換你你樂意么?hl528資訊網(wǎng)——每日最新資訊28at.com

參考資料

[1]官方博客:https://eslint.org/blog/2023/10/deprecating-formatting-rules/。hl528資訊網(wǎng)——每日最新資訊28at.com

[2]Airbnb規(guī)則:https://airbnb.io/javascript/。hl528資訊網(wǎng)——每日最新資訊28at.com

[3]standard規(guī)則:https://standardjs.com/。hl528資訊網(wǎng)——每日最新資訊28at.com

[4]@stylistic/eslint-plugin-js:https://www.npmjs.com/package/@stylistic/eslint-plugin-js。hl528資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-16023-0.htmlEslint團(tuán)隊(duì)終于妥協(xié)了...

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Python控制流程:條件、循環(huán)和異常處理

下一篇: 通過實(shí)例理解Web應(yīng)用用戶密碼存儲(chǔ)方案

標(biāo)簽:
  • 熱門焦點(diǎn)
  • K60 Pro官方停產(chǎn) 第三方瞬間漲價(jià)

    雖然沒有官方宣布,但Redmi的一些高管也已經(jīng)透露了,Redmi K60 Pro已經(jīng)停產(chǎn)且不會(huì)補(bǔ)貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機(jī)在停產(chǎn)之后
  • CSS單標(biāo)簽實(shí)現(xiàn)轉(zhuǎn)轉(zhuǎn)logo

    轉(zhuǎn)轉(zhuǎn)品牌升級(jí)后更新了全新的Logo,今天我們用純CSS來實(shí)現(xiàn)轉(zhuǎn)轉(zhuǎn)的新Logo,為了有一定的挑戰(zhàn)性,這里我們只使用一個(gè)標(biāo)簽實(shí)現(xiàn),將最大化的使用CSS能力完成Logo的繪制與動(dòng)畫效果。新logo
  • 把LangChain跑起來的三個(gè)方法

    使用LangChain開發(fā)LLM應(yīng)用時(shí),需要機(jī)器進(jìn)行GLM部署,好多同學(xué)第一步就被勸退了,那么如何繞過這個(gè)步驟先學(xué)習(xí)LLM模型的應(yīng)用,對(duì)Langchain進(jìn)行快速上手?本片講解3個(gè)把LangChain跑起來
  • 多線程開發(fā)帶來的問題與解決方法

    使用多線程主要會(huì)帶來以下幾個(gè)問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結(jié)束訪問某一數(shù)據(jù)期間,該數(shù)據(jù)被其他的線程所修改,那么對(duì)于當(dāng)前線程而言,該線程
  • 當(dāng)家的盒馬,加速謀生

    來源 | 價(jià)值星球Planet作者 | 歸去來自己“當(dāng)家”的盒馬,開始加速謀生了。據(jù)盒馬官微消息,盒馬計(jì)劃今年開放生鮮供應(yīng)鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • 華為將推出盤古數(shù)字人大模型 可幫助用戶12小時(shí)完成數(shù)字人生成

    在今日舉行的2023年華為云數(shù)字文娛AI創(chuàng)新峰會(huì)上,華為云全球Marketing與銷售服務(wù)總裁石冀琳表示,華為云將在后續(xù)推出盤古數(shù)字人大模型,可幫助用戶12小
  • OPPO K11搭載高性能石墨散熱系統(tǒng):旗艦同款 性能涼爽釋放

    日前OPPO官方宣布,將于7月25日14:30舉辦新品發(fā)布會(huì),屆時(shí)全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競(jìng)品相比,其最大的賣點(diǎn)就是將配備索尼
  • 英特爾Xe-HP項(xiàng)目終止,將專注Xe-HPC/HPG系列顯卡

    據(jù)10 月 31 日消息報(bào)道,英特爾高級(jí)副總裁兼加速計(jì)算系統(tǒng)和圖形事業(yè)部總經(jīng)理 表示,Xe-HP“ Arctic Sound” 系列服務(wù)器 GPU 已經(jīng)應(yīng)用于 oneAPI devcloud 云服
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀。  美國(guó)時(shí)間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內(nèi)容審核等。此前,T
Top 主站蜘蛛池模板: 清远市| 石棉县| 乐亭县| 邵武市| 肃北| 蓬溪县| 河间市| 彩票| 忻州市| 康马县| 合山市| 启东市| 合阳县| 海原县| 怀宁县| 万安县| 巨鹿县| 溧水县| 华亭县| 眉山市| 上虞市| 通海县| 黄浦区| 墨竹工卡县| 自贡市| 屯门区| 三江| 建湖县| 北票市| 溧水县| 尼勒克县| 乐亭县| 恩平市| 元谋县| 耒阳市| 长沙县| 扎鲁特旗| 安新县| 云梦县| 松桃| 凤城市|