在 React 項(xiàng)目中集成 ESLint 做代碼規(guī)范

"在團(tuán)隊(duì)項(xiàng)目開發(fā)中,每人都有自己代碼分格,而這些不同的代碼風(fēng)格混合在同一個(gè)項(xiàng)目中會(huì)使得代碼看起來十分混亂,不利于閱讀和維護(hù),而這常常令我們感到煩惱。因此在一個(gè)團(tuán)隊(duì)中制定一套統(tǒng)一的代碼規(guī)范勢(shì)在必行。我之前在《React 項(xiàng)目中引入 TSLint 做代碼規(guī)范》這篇文章中簡(jiǎn)單的介紹了一下如何在項(xiàng)目中引入TSLint做代碼規(guī)范,現(xiàn)在本篇文章要介紹一下如何在項(xiàng)目中引入ESLint做代碼規(guī)范。TSLint 和 ESlint 都是用來制定代碼規(guī)范的工具,因此選擇其中一個(gè)集成項(xiàng)目即可。這里介紹的是使用著名的獨(dú)角獸公司 Airbnb 的前端ESlint編碼規(guī)范

步驟一、安裝?Airbnb 相關(guān)插件

現(xiàn)在終端(或cmd)中執(zhí)行命令 npm -v 查看npm 版本號(hào),如果不是 5 以上版本請(qǐng)先安裝 nodejs?得到最新版本的 npm 執(zhí)行一下命令

npx?install-peerdeps?--dev?eslint-config-airbnb

1-1

這是最簡(jiǎn)單的做法安裝 Airbnb 相關(guān)配套插件,當(dāng)然官網(wǎng)中還有介紹其他的安裝方法,不過另一種方法不如上面這一條命令來的簡(jiǎn)單所以這里不做贅述,有興趣的可以 點(diǎn)擊這里查看

注意:如果在執(zhí)行安裝 eslint-config-airbnb?命令時(shí)報(bào)錯(cuò),錯(cuò)誤信息為:“找不到命令:install-peerdeps”,這時(shí)需要執(zhí)行命令?npm install -g install-peerdeps 來安裝??install-peerdeps 之后再嘗試使用命令安裝?eslint-config-airbnb

步驟二、配置 .eslintrc.js 文件

在項(xiàng)目根目錄下檢查是否有以 eslintrc 為名字的文件(可能是?.eslintrc、.eslintrc.js、.eslintrc.json 等),如果沒有則手動(dòng)創(chuàng)建一個(gè)?.eslintrc.js 文件

2-1

我的?.eslintrc.js 的初步配置文件如下圖,在后期項(xiàng)目逐步完善可能還會(huì)再根據(jù)團(tuán)隊(duì)偏好再在rules中添加新的規(guī)則或覆蓋airbnb中的規(guī)則(在文末有 .eslintrc.js 文件中的代碼可復(fù)制)

2-2

需要注意的是在?.eslintrc.js 文件的配置中有幾個(gè)字段需要注意

parser: 配置解析器,可以是?babel-eslint,也可所以是?@typescript-eslint/parser,而官網(wǎng)中寫道默認(rèn)是?esprima,根據(jù)我的測(cè)試?babel-eslint 貌似只能解析 js 文件中ESLint規(guī)則,解析不到 tsx 文件中的規(guī)則,因此我在項(xiàng)目中使用的?@typescript-eslint/parser

plugins:在配置文件里配置插件時(shí),?可以使用?plugins?關(guān)鍵字來存放插件名字的列表。插件名稱可以省略?eslint-plugin-?前綴。

rules:這是規(guī)則配置字段,該字段中的規(guī)則的優(yōu)先級(jí)高于 aribnb 的規(guī)則,可以在該字段中配置規(guī)則覆蓋?aribnb 中的規(guī)則。

步驟三、配置 .eslintignore 忽略文件

在該文件中配置不需要被 ESLint 檢測(cè)的文件,如圖3-1是我在項(xiàng)目中的配置

3-1

官網(wǎng)中的介紹如圖3-2

3-2

步驟四、安裝VsCode插件

安裝ESLint插件后重啟編輯器,查看ESLint規(guī)則是否生效

4-1

步驟五、檢查ESLint規(guī)則是否生效

5-1

注意:如果沒有生效查看在?.eslintrc.js? 中的 rules 字段中是否配置了如下(如圖2-1)規(guī)則

'react/jsx-filename-extension':?['error',{extensions:?['.js',?'.jsx',?'.ts',?'.tsx'],}, ],

添加該規(guī)則后重啟編輯器


注意:配置ESLint生效后請(qǐng)前往 《React 項(xiàng)目中添加 ESLint + Perttier 做代碼規(guī)范》查看 ESLint 如何搭配?Perttier 寫出更優(yōu)質(zhì)的代碼。


.eslintrc.js 中的編碼

module.exports?=?{

????extends:?['airbnb',?'airbnb/hooks',?'prettier'],

????parser:?'@typescript-eslint/parser',?//?ESLint?默認(rèn)使用?esprima?作為其解析器,也可以在配置文件中指定一個(gè)不同的解析器(它必須是一個(gè)?Node?模塊,且它必須符合?parser?interface)

????env:?{

????????//?要在配置文件里指定環(huán)境,使用?env?關(guān)鍵字指定你想啟用的環(huán)境,并設(shè)置它們?yōu)?true

????????browser:?true,

????????node:?true,

????????mocha:?true,

????????es6:?true,

????????commonjs:?true,

????},

????globals:?{

????????//?要在配置文件中配置全局變量,?對(duì)于每個(gè)全局變量鍵,將對(duì)應(yīng)的值設(shè)置為?"writable"?以允許重寫變量,或?"readonly"?不允許重寫變量

????????//?"Babel":?"writable",

????????//?"React":?"writable"

????},

????plugins:?[

????????//?在配置文件里配置插件時(shí),?可以使用?plugins?關(guān)鍵字來存放插件名字的列表。插件名稱可以省略?eslint-plugin-?前綴。

????????'react',

????????'jsx-a11y',

????????'react-hooks',

????????'import',

????????'prettier',

????],

????rules:?{

????????//?可以使用?rules?連同錯(cuò)誤級(jí)別和任何你想使用的選項(xiàng),在配置文件中進(jìn)行對(duì)airbnb規(guī)則的修改

????????indent:?['error',?4],

????????semi:?[

????????????'error',

????????????'always',

????????????{

????????????????omitLastInOneLineBlock:?true,

????????????},

????????],

????????'react/jsx-indent':?['error',?4],

????????'linebreak-style':?['error',?'windows'],

????????'react/jsx-filename-extension':?[

????????????'error',

????????????{

????????????????extensions:?['.js',?'.jsx',?'.ts',?'.tsx'],

????????????},

????????],

????????'class-methods-use-this':?'off',

????????'import/extensions':?'off',

????????'import/no-unresolved':?'off',

????????'prettier/prettier':?'error',

????????//?'sort-imports':?['error',?{

????????//?????ignoreCase:?false,

????????//?????ignoreDeclarationSort:?false,

????????//?????ignoreMemberSort:?false,

????????//?????memberSyntaxSortOrder:?['none',?'all',?'multiple',?'single'],

????????//?}],

????????//?"global-require":?"off",

????????//?"no-underscore-dangle":?"off",

????????//?"no-new-func":?"off",

????????//?"no-param-reassign":?"off",

????????//?"react/prefer-stateless-function":?"off",

????????//?"react/no-multi-comp":?"off",

????????//?"react/jsx-no-bind":?"off",

????????//?"react/jsx-indent":?"off",

????????//?"react/jsx-first-prop-new-line":?"off",

????????//?"react/jsx-filename-extension":?"off",

????????//?"no-restricted-syntax":?"off"

????},

};





參考網(wǎng)址:

ESlint中文官網(wǎng):https://eslint.bootcss.com/docs/user-guide/getting-started

https://www.npmjs.com/package/eslint-config-airbnb

https://blog.csdn.net/msg1254765721/article/details/90090242

http://www.lxweimin.com/p/933b6b6a84c9

https://www.cnblogs.com/samwu/p/5772778.html

https://www.cnblogs.com/kugeliu/p/9154021.html

https://blog.csdn.net/weixin_34167043/article/details/88728537

https://blog.csdn.net/qq_43093708/article/details/82969272

http://www.lxweimin.com/p/857a840cc9c6

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,310評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,566評(píng)論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,055評(píng)論 1 322
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,303評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,799評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,683評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,899評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,135評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評(píng)論 1 282
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,528評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,844評(píng)論 2 372