中間監(jiān)測到什么語法問題蜕乡,可以見另外一篇??
eslint 常見錯誤合集
ESLint 入門
ESLint 是一種用于識別和報告 ECMAScript/JavaScript 代碼中發(fā)現(xiàn)的模式的工具影锈,其目標是使代碼更加一致并避免錯誤。
npm add -D eslint
初始化ESLint配置
npx eslint --init
選prettier規(guī)定格式蹄溉。安裝完成后(根目錄會生成.eslintrc.js文件)這個配置文件是默認生成的,還不能用于項目后面會修改此配置文件冤竹。
插件及vite配置
1.安裝vite-plugin-eslint
npm add -D vite-plugin-eslint
2.安裝eslint-parser
npm add @babel/core @babel/eslint-parser -D
3.vite.config.js 配置
// vite.config.js
import eslintPlugin from 'vite-plugin-eslint';
export default defineConfig({
plugins: [
...
eslintPlugin({
include: [
'src/**/*.ts',
'src/**/*.js',
'src/**/**/*.vue',
'src/**/**/**/*.vue',
'src/**/**/**/**/*.vue',
'src/*.ts',
'src/*.vue',
// 根據(jù)自己目錄深度配置
],
}),
})
vscode安裝插件
prettier安裝及配置
1.安裝prettier
npm add prettier eslint-config-prettier eslint-plugin-prettier -D
2.配置.prettierrc.js
在根目錄下面添加.prettierrc.js文件夾溶浴,可以根據(jù)代碼規(guī)范將下面參數(shù)配置在其中。其實也用不了配置這么多,保存的時候 會自動根據(jù)規(guī)則補全闸迷。
/** .prettierrc.js
* 在VSCode中安裝prettier插件 打開插件配置填寫`.prettierrc.js` 將本文件作為其代碼格式化規(guī)范
* 在本文件中修改格式化規(guī)則嵌纲,不會同時觸發(fā)改變ESLint代碼檢查,所以每次修改本文件需要重啟VSCode腥沽,ESLint檢查才能同步代碼格式化
* 需要相應(yīng)的代碼格式化規(guī)范請自行查閱配置逮走,下面為默認項目配置
*/
module.exports = {
// 一行最多多少個字符
printWidth: 150,
// 指定每個縮進級別的空格數(shù)
tabWidth: 4,
// 使用制表符而不是空格縮進行
useTabs: true,
// 在語句末尾是否需要分號
semi: true,
// 是否使用單引號
singleQuote: true,
// 更改引用對象屬性的時間 可選值"<as-needed|consistent|preserve>"
quoteProps: 'as-needed',
// 在JSX中使用單引號而不是雙引號
jsxSingleQuote: false,
// 多行時盡可能打印尾隨逗號。(例如今阳,單行數(shù)組永遠不會出現(xiàn)逗號結(jié)尾师溅。) 可選值"<none|es5|all>",默認none
trailingComma: 'es5',
// 在對象文字中的括號之間打印空格
bracketSpacing: true,
// jsx 標簽的反尖括號需要換行
jsxBracketSameLine: false,
// 在單獨的箭頭函數(shù)參數(shù)周圍包括括號 always:(x) => x \ avoid:x => x
arrowParens: 'always',
// 這兩個選項可用于格式化以給定字符偏移量(分別包括和不包括)開始和結(jié)束的代碼
rangeStart: 0,
rangeEnd: Infinity,
// 指定要使用的解析器,不需要寫文件開頭的 @prettier
requirePragma: false,
// 不需要自動在文件開頭插入 @prettier
insertPragma: false,
// 使用默認的折行標準 always\never\preserve
proseWrap: 'preserve',
// 指定HTML文件的全局空格敏感度 css\strict\ignore
htmlWhitespaceSensitivity: 'css',
// Vue文件腳本和樣式標簽縮進
vueIndentScriptAndStyle: false,
//在 windows 操作系統(tǒng)中換行符通常是回車 (CR) 加換行分隔符 (LF),也就是回車換行(CRLF)舔痪,
//然而在 Linux 和 Unix 中只使用簡單的換行分隔符 (LF)蟆炊。
//對應(yīng)的控制字符為 "\n" (LF) 和 "\r\n"(CRLF)。auto意為保持現(xiàn)有的行尾
// 換行符使用 lf 結(jié)尾是 可選值"<auto|lf|crlf|cr>"
endOfLine: 'auto',
};
但是eslint 和prettier 自帶的規(guī)則是不合的枢赔,有沖突,需要更改.eslintrc.js 配置, 下面是基礎(chǔ)配置,如果還需什么配置嗡载,可以從最下面的詳細配置里面去取。
/*
* 如果同一目錄下 .eslintrc 和 package.json 同時存在铸史,.eslintrc 優(yōu)先級高會被使用鼻疮,package.json 文件將不會被使用
*/
module.exports = {
root: true, // 默認情況下,ESLint 會在所有父級目錄里尋找配置文件琳轿,一直到根目錄; 一旦發(fā)現(xiàn)配置文件中有 "root": true判沟,它就會停止在父級目錄中尋找
env: {
browser: true,
node: true,
},
extends: [
'eslint-config-prettier',
'eslint:recommended', // 使用推薦的eslint
'plugin:@typescript-eslint/recommended',
'plugin:vue/vue3-recommended', // 使用插件支持vue3
'plugin:vue/vue3-essential',
//1.繼承.prettierrc.js文件規(guī)則2.開啟rules的 "prettier/prettier": "error"3.eslint fix的同時執(zhí)行prettier格式化
'plugin:prettier/recommended',
],
parser: 'vue-eslint-parser',
parserOptions: {
ecmaVersion: 2020,
type: 'module',
sourceType: 'moudule',
parser: '@typescript-eslint/parser',
},
plugins: [],
globals: {
defineProps: 'readonly',
defineEmits: 'readonly',
defineExpose: 'readonly',
withDefaults: 'readonly',
},
rules: {
'no-console':
process.env.NODE_ENV === 'production'
? ['error', { allow: ['error', 'warn'] }]
: 'off', //生產(chǎn)模式不允許使用log
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', //生產(chǎn)默認不允許使用debugger
'@typescript-eslint/no-unused-vars': [
'error',
{ varsIgnorePattern: '.*', args: 'none' },
], //變量聲明未使用
'@typescript-eslint/no-explicit-any': 'off', // 允許ts使用any
// '@typescript-eslint/no-var-requires': 'off', // 強制使用 import 且不允許使用 require 設(shè)置off關(guān)閉檢查
// 'vue/require-v-for-key': 'off', // 對保留元素檢查 vue3中v-for會自動追加key值,所以不用再強制添加key屬性崭篡,所以不檢查key的填寫
// 'vue/valid-v-for': 'off', // 對于非保留(自定義)元素檢查vue3中v-for會自動追加key值挪哄,所以不用再強制添加key屬性,所以不檢查key的填寫
// 添加組件命名忽略規(guī)則 vue官方默認規(guī)則是多單詞駝峰來進行組件命名, 如果為off 則表示關(guān)閉命名規(guī)范校驗
'vue/multi-word-component-names': [
'warn',
{
ignores: ['index', 'home', 'layout', 'user'], //需要忽略的組件名
},
],
'no-func-assign': 2, //禁止重復(fù)的函數(shù)聲明
'no-implicit-coercion': 1, //禁止隱式轉(zhuǎn)換
'no-implied-eval': 2, //禁止使用隱式eval
'no-inline-comments': 0, //禁止行內(nèi)備注
'block-scoped-var': 0, //塊語句中使用var
eqeqeq: 2, //必須使用全等
indent: ['error', 4], //縮進風格
"complexity": [1, 10], // 添加復(fù)雜度
},
};
運行eslint代碼規(guī)范
我更推薦把執(zhí)行命令寫入package.json
"scripts": {
...
"lint": "eslint --fix --ext .ts,.js,.vue src"
},
參數(shù)說明: eslint --fix . 根據(jù)eslintrc配置修復(fù)項目下所有的js文件琉闪,不包含自己迹炼; --ext .ts,.js,.vue src 指定修復(fù)src目錄下的.ts,.js文件,后綴名用逗號隔開颠毙。
當然eslint 也可以設(shè)置需要忽略掉的文件夾 node_modules和dist斯入。
根目錄下創(chuàng)建eslint忽略文件配置.eslintignore,來指定我們不需要進行檢查的目錄或文件
/**
* 參考文檔
* https://zh-hans.eslint.org/docs/latest/use/configure/ignore
*/
{
"ignorePatterns": ["temp.js", "**/vendor/*.js", "dist", "node_modules"],
"rules": {
//...
}
}
ESLintrc.js詳細參數(shù)
/**
* 參考文檔
* 【eslint英文文檔】https://eslint.org/docs/user-guide/configuring
* 【eslint中文文檔】http://eslint.cn/docs/rules/
*/
/**
* eslint有三種使用方式
* 【1】js代碼中通過注釋的方式使用
* 【2】通過webpack的eslintConfig字段設(shè)置蛀蜜,eslint會自動搜索項目的package.json文件中的配置
* 【3】通過配置文件的方式使用刻两,配置文件有多種文件方式,如JavaScript滴某、JSON 或者 YAML等
*/
/**
* 文件忽略
* 【】讓eslint跳過特定文件的檢測
* 【】通過當前工作目錄下 「.eslintignore」 文件進行設(shè)置
* 其使用的是Glob路徑書寫方式磅摹,與「.gitignore」的使用方法相同
* 【】也可以在 package.json 文件中滋迈,通過 eslintIgnore 參數(shù)進行設(shè)置
*/
/**
* 文件內(nèi)局部設(shè)置
* 【】eslint可以具體文件中設(shè)置特定代碼的規(guī)則,常用于跳過某條語句的檢測户誓。
* 【】注銷全部規(guī)則饼灿,在代碼前新建一行,添加注銷 /* eslint-disable *\/ 帝美。如果沒有恢復(fù)設(shè)置的語句碍彭,則下列全部代碼都會跳過檢測。
* 【】恢復(fù)eslint证舟,在代碼前新建一行硕旗,添加注銷 /* eslint-enable *\/
* 【】指定忽略的規(guī)則,/* eslint-disable no-alert, no-console *\/
* 【】在特定行禁用女责,// eslint-disable-line
* 【】在下一行禁用漆枚,// eslint-disable-next-line
*/
module.exports = {
/**
* 根目錄標識
* http://eslint.cn/docs/user-guide/configuring#using-configuration-files
* http://eslint.cn/docs/user-guide/configuring#configuration-cascading-and-hierarchy
* 【】標識當前配置文件為最底層的文件,無需往更上一級的文件目錄中進行搜索
* 【】默認eslint的配置文件搜索方式是抵知,從目標文件夾進行搜索墙基,遍歷內(nèi)部每一個文件夾,找到配置文件并層疊使用刷喜。再跳出本項目残制,往祖先文件夾進行遍歷
* 【】注意「~/.eslintrc」的意義,「~」是指linux上的家目錄掖疮,「~/.eslintrc」是指家目錄下的eslint配置文件初茶,用于私人開發(fā)者,用于整個電腦全局約束的浊闪。這個配置通過本配置項root去設(shè)置恼布,設(shè)置了root,eslint檢測時將不會再往上搜索
* 【】eslint的生效規(guī)則是就近使用,越近的配置項優(yōu)先級越高搁宾,覆蓋其他配置項折汞。如一個項目中,可以在不同文件夾中都添加配置文件盖腿,這些規(guī)則將重疊組合生效
*/
root: true, // 標識當前配置文件為eslint的根配置文件爽待,讓其停止在父級目錄中繼續(xù)尋找。
/**
* 解析器
* http://eslint.cn/docs/user-guide/configuring#specifying-parser
* 【】ESLint 默認使用Espree作為其解析器
* 【】解析器必須是本地安裝的一個 npm 模塊翩腐。即必須按照在本地的node_module中
* 【】解析器是用于解析js代碼的鸟款,怎么去理解每一個表達式,有點C++中編譯器的概念茂卦,會對js進行一些語法分析欠雌,語義分析什么的,才能判斷語句符不符合規(guī)范疙筹。而不是通過簡單的字符串對比富俄。
* 【】解析器有很多,但兼容eslint的解析器有以下幾個
* Espree:默認解析器而咆,一個從Esprima中分離出來的解析器霍比,做了一些優(yōu)化
* Esprima:js標準解析器
* Babel-ESLint: 一個對Babel解析器的包裝,babel本身也是js解析器的一種(不然怎么能轉(zhuǎn)化為兼容性代碼呢暴备?首先需要進行js解析悠瞬,才能轉(zhuǎn)化)。如果我們的代碼需要經(jīng)過babel轉(zhuǎn)化涯捻,則對應(yīng)使用這個解析器
* typescript-eslint-parser(實驗) - 一個把 TypeScript 轉(zhuǎn)換為 ESTree 兼容格式的解析器
* 【】但是通常在vue項目中浅妆,并不會寫在 parser 字段中,而是寫在 parserOptions -> parser障癌。具體原因在 parserOptions 一欄中介紹
*/
// parser: 'babel-eslint',
/**
* 解析器配置項
* http://eslint.cn/docs/user-guide/configuring#specifying-parser-options
* 【】這里設(shè)置的配置項將會傳遞到解析器中凌外,被解析器獲取到,進行一定的處理涛浙。具體被利用到康辑,要看解析器的源碼有沒有對其進行利用。這里僅僅做了參數(shù)定義轿亮,做了規(guī)定疮薇,告訴解析器的開發(fā)者可能有這些參數(shù)
* 【】配置項目有:
* "sourceType": "module", // 指定JS代碼來源的類型,script(script標簽引入我注?) | module(es6的module模塊)按咒,默認為script。為什么vue的會使用script呢但骨?因為vue是通過babel-loader編譯的励七,而babel編譯后的代碼就是script方式
* "ecmaVersion": 6, // 支持的ES語法版本,默認為5嗽冒。注意只是語法呀伙,不包括ES的全局變量。全局變量需要在env選項中進行定義
* "ecmaFeatures": { // Features是特征的意思添坊,這里用于指定要使用其他那些語言對象
"experimentalObjectRestSpread": true, //啟用對對象的擴展
"jsx": true, //啟用jsx語法
"globalReturn":true, //允許return在全局使用
"impliedStrict":true //啟用嚴格校驗?zāi)J? }
*/
parserOptions: {
/**
* 這里出現(xiàn) parser 的原因
* 【】首先明確一點剿另,官方說明中,parserOptions的配置參數(shù)是不包括 parser 的
* 【】這里的寫 parser 是 eslint-plugin-vue 的要求贬蛙,是 eslint-plugin-vue 的自定義參數(shù)
* 【】根據(jù)官方文檔雨女,eslint-plugin-vue 插件依賴 「vue-eslint-parser」解析器⊙糇迹「vue-eslint-parser」解析器氛堕,只解析 .vue 中html部分的內(nèi)容,不會檢測<script>中的JS內(nèi)容野蝇。
* 【】由于解析器只有一個讼稚,用了「vue-eslint-parser」就不能用「babel-eslint」括儒。所以「vue-eslint-parser」的做法是,在解析器選項中锐想,再傳入一個解析器選項parser帮寻。從而在內(nèi)部處理「babel-eslint」,檢測<script>中的js代碼
* 【】所以這里出現(xiàn)了 parser
* 【】相關(guān)文檔地址赠摇,https://vuejs.github.io/eslint-plugin-vue/user-guide/#usage
*/
parser: 'babel-eslint',
},
/**
* 運行環(huán)境
* http://eslint.cn/docs/user-guide/configuring#specifying-environments
* 【】一個環(huán)境定義了一組預(yù)定義的全局變量
* 【】獲得了特定環(huán)境的全局定義固逗,就不會認為是開發(fā)定義的,跳過對其的定義檢測藕帜。否則會被認為改變量未定義
* 【】常見的運行環(huán)境有以下這些烫罩,更多的可查看官網(wǎng)
* browser - 瀏覽器環(huán)境中的全局變量。
* node - Node.js 全局變量和 Node.js 作用域洽故。
* es6 - 啟用除了 modules 以外的所有 ECMAScript 6 特性(該選項會自動設(shè)置 ecmaVersion 解析器選項為 6)贝攒。
* amd - 將 require() 和 define() 定義為像 amd 一樣的全局變量。
* commonjs - CommonJS 全局變量和 CommonJS 作用域 (用于 Browserify/WebPack 打包的只在瀏覽器中運行的代碼)收津。
* jquery - jQuery 全局變量饿这。
* mongo - MongoDB 全局變量。
* worker - Web Workers 全局變量撞秋。
* serviceworker - Service Worker 全局變量长捧。
*/
env: {
browser: true, // 瀏覽器環(huán)境
},
/**
* 全局變量
* http://eslint.cn/docs/user-guide/configuring#specifying-globals
* 【】定義額外的全局,開發(fā)者自定義的全局變量吻贿,讓其跳過no-undef 規(guī)則
* 【】key值就是額外添加的全局變量
* 【】value值用于標識該變量能否被重寫串结,類似于const的作用。true為允許變量被重寫
* 【】注意:要啟用no-global-assign規(guī)則來禁止對只讀的全局變量進行修改舅列。
*/
globals: {
// gTool: true, // 例如定義gTool這個全局變量肌割,且這個變量可以被重寫
},
/**
* 插件
* http://eslint.cn/docs/user-guide/configuring#configuring-plugins
* 【】插件同樣需要在node_module中下載
* 【】注意插件名忽略了「eslint-plugin-」前綴,所以在package.json中帐要,對應(yīng)的項目名是「eslint-plugin-vue」
* 【】插件的作用類似于解析器把敞,用以擴展解析器的功能,用于檢測非常規(guī)的js代碼榨惠。也可能會新增一些特定的規(guī)則奋早。
* 【】如 eslint-plugin-vue,是為了幫助我們檢測.vue文件中 <template> 和 <script> 中的js代碼
*/
plugins: ['vue'],
/**
* 規(guī)則繼承
* http://eslint.cn/docs/user-guide/configuring#extending-configuration-files
*【】可繼承的方式有以下幾種
*【】eslint內(nèi)置推薦規(guī)則赠橙,就只有一個耽装,即「eslint:recommended」
*【】可共享的配置, 是一個 npm 包期揪,它輸出一個配置對象掉奄。即通過npm安裝到node_module中
* 可共享的配置可以省略包名的前綴 eslint-config-,即實際設(shè)置安裝的包名是 eslint-config-airbnb-base
*【】從插件中獲取的規(guī)則凤薛,書寫規(guī)則為 「plugin:插件包名/配置名」姓建,其中插件報名也是可以忽略「eslint-plugin-」前綴诞仓。如'plugin:vue/essential'
*【】從配置文件中繼承,即繼承另外的一個配置文件速兔,如'./node_modules/coding-standard/eslintDefaults.js'
*/
extends: [
/**
* vue 的額外添加的規(guī)則是 v-if, v-else 等指令檢測
*/
'plugin:vue/essential', // 額外添加的規(guī)則可查看 https://vuejs.github.io/eslint-plugin-vue/rules/
/**
* 「airbnb狂芋,愛彼迎」
* 【】有兩種eslint規(guī)范,一種是自帶了react插件的「eslint-config-airbnb」憨栽,一種是基礎(chǔ)款「eslint-config-airbnb-base」,
* 【】airbnb-base 包括了ES6的語法檢測翼虫,需要依賴 「eslint-plugin-import」
* 【】所以在使用airbnb-base時屑柔,需要用npm額外下載 eslint-plugin-import
* 【】所以eslint實際上已經(jīng)因為 airbnb-base 基礎(chǔ)配置項目,添加上了 eslint-plugin-import 插件配置
* 【】所以在setting和rules里珍剑,都有 'import/xxx' 項目掸宛,這里修改的就是 eslint-plugin-import 配置
*/
// 'airbnb-base',
],
/**
* 規(guī)則共享參數(shù)
* http://eslint.cn/docs/user-guide/configuring#adding-shared-settings
* 【】提供給具體規(guī)則項,每個參數(shù)值招拙,每個規(guī)則項都會被注入該變量唧瘾,但對應(yīng)規(guī)則而言,有沒有用别凤,就看各個規(guī)則的設(shè)置了饰序,就好比 parserOptions,解析器用不用它就不知道了规哪。這里只是提供這個方法
* 【】不用懷疑求豫,經(jīng)源碼驗證,這就是傳遞給每個規(guī)則項的诉稍,會當做參數(shù)傳遞過去蝠嘉,但用不用,就是具體規(guī)則的事情
*/
settings: {
/**
*
* 注意杯巨,「import/resolver」并不是eslint規(guī)則項蚤告,與rules中的「import/extensions」不同。它不是規(guī)則項
* 這里只是一個參數(shù)名服爷,叫「import/resolver」杜恰,會傳遞給每個規(guī)則項。
* settings并沒有具體的書寫規(guī)則层扶,「import/」只是import模塊自己起的名字箫章,原則上,它直接命名為「resolver」也可以镜会,加上「import」只是為了更好地區(qū)分檬寂。不是強制設(shè)置的。
* 因為「import」插件很多規(guī)則項都用的這個配置項戳表,所以并沒有通過rules設(shè)置桶至,而是通過settings共享
* 具體使用方法可參考https://github.com/benmosher/eslint-plugin-import
*/
'import/resolver': {
/**
* 這里傳入webpack并不是import插件能識別webpack昼伴,而且通過npm安裝了「eslint-import-resolver-webpack」,
* 「import」插件通過「eslint-import-resolver-」+「webpack」找到該插件并使用镣屹,就能解析webpack配置項圃郊。使用里面的參數(shù)。
* 主要是使用以下這些參數(shù)女蜈,共享給import規(guī)則持舆,讓其正確識別import路徑
* extensions: ['.js', '.vue', '.json'],
* alias: {
* 'vue$': 'vue/dist/vue.esm.js',
* '@': resolve('src'),
* 'static': resolve('static')
* }
*/
webpack: {
config: 'build/webpack.base.conf.js'
}
}
},
/**
* 針對特定文件的配置
* 【】可以通過overrides對特定文件進行特定的eslint檢測
* 【】特定文件的路徑書寫使用Glob格式,一個類似正則的路徑規(guī)則伪窖,可以匹配不同的文件
* 【】配置幾乎與 ESLint 的其他配置相同逸寓。覆蓋塊可以包含常規(guī)配置中的除了 extends、overrides 和 root 之外的其他任何有效配置選項覆山,
*/
// overrides: [
// {
// 'files': ['bin/*.js', 'lib/*.js'],
// 'excludedFiles': '*.test.js',
// 'rules': {
// 'quotes': [2, 'single']
// }
// }
// ],
/**
* 自定義規(guī)則
* http://eslint.cn/docs/user-guide/configuring#configuring-rules
* 【】基本使用方式
* "off" 或者0 關(guān)閉規(guī)則
* "warn" 或者1 將規(guī)則打開為警告(不影響退出代碼)
* "error" 或者2 將規(guī)則打開為錯誤(觸發(fā)時退出代碼為1)
* 如:'no-restricted-syntax': 0, // 表示關(guān)閉該規(guī)則
* 【】如果某項規(guī)則竹伸,有額外的選項,可以通過數(shù)組進行傳遞簇宽,而數(shù)組的第一位必須是錯誤級別勋篓。如0,1,2
* 如 'semi': ['error', 'never'], never就是額外的配置項
*/
rules: {
/**
* 具體規(guī)則
* 【】具體的規(guī)則太多,就不做介紹了魏割,有興趣的同學可以上eslint官網(wǎng)查
* 【】注意 xxx/aaa 這些規(guī)則是 xxx 插件自定的規(guī)則譬嚣,在eslint官網(wǎng)是查不到的。需要到相應(yīng)的插件官網(wǎng)中查閱
* 【】如 import/extensions见妒,這是「eslint-plugin-import」自定義的規(guī)則孤荣,需要到其官網(wǎng)查看 https://github.com/benmosher/eslint-plugin-import
*/
/**
* 邏輯錯誤及最佳實踐的規(guī)則
*/
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, // 打包時禁止debugger
'no-console': process.env.NODE_ENV === 'production' ? 2 : 0, // 打包時禁止console
'no-alert': process.env.NODE_ENV === 'production' ? 2 : 0, // 打包時禁止console
"for-direction": 2, // 禁止for無限循環(huán)
"no-compare-neg-zero": 2, // 禁止與-0進行比較
'no-cond-assign': 2, // 禁止條件語句中出現(xiàn)賦值語句
"no-control-regex": 2, // 在 ASCII 中,0-31 范圍內(nèi)的控制字符是特殊的须揣、不可見的字符盐股。這些字符很少被用在 JavaScript 字符串中,所以一個正則表達式如果包含這些字符的耻卡,很有可能一個錯誤疯汁。
"no-dupe-args": 2, // 禁止在函數(shù)定義或表達中出現(xiàn)重名參數(shù)
"no-dupe-keys": 2, // 禁止在對象字面量中出現(xiàn)重復(fù)的鍵
"no-duplicate-case": 2, // 禁止重復(fù) case 標簽
"no-empty": 2, // 禁止空塊語句
"no-empty-character-class": 2, // 禁止在正則表達式中出現(xiàn)空字符集
"no-ex-assign": 2, // 禁止對 catch 子句中的異常重新賦值。因為catch出來的都是錯誤信息卵酪,不需要重新賦值
"no-extra-boolean-cast": 2, // 禁止不必要的布爾類型轉(zhuǎn)換幌蚊,如 !!true
"no-extra-semi": 2, // 禁用不必要的分號
"no-inner-declarations": 2, // ??? 禁止在嵌套的語句塊中出現(xiàn)變量
"no-regex-spaces": 2, // 禁止正則表達式字面量中出現(xiàn)多個空格
"no-obj-calls": 2, // 禁止將全局對象當作函數(shù)進行調(diào)用
"no-prototype-builtins": 2, // ??? 禁止直接在對象實例上調(diào)用 Object.prototype 的一些方法。
"no-template-curly-in-string": 2, // 禁止在常規(guī)字符串中出現(xiàn)模板字面量占位符語法
"semi": [2, 'never'], // ??? 強制是否使用分號溃卡。
"no-unexpected-multiline": 2, // 禁止使用令人困惑的多行表達式
"no-unreachable": 2, // 禁止在 return溢豆、throw、continue 和 break 語句后出現(xiàn)不可達代碼
"use-isnan": 2, // 要求調(diào)用 isNaN()檢查 NaN
"no-unsafe-negation": 2, // 禁止對關(guān)系運算符的左操作數(shù)使用否定操作符
"valid-jsdoc": 2, // 強制使用有效的 JSDoc 注釋
"valid-typeof": 2, // 強制 typeof 表達式與有效的字符串進行比較
"array-callback-return": 2, // 強制數(shù)組方法的回調(diào)函數(shù)中有 return 語句
"block-scoped-var": 2, // 把 var 語句看作是在塊級作用域范圍之內(nèi)
"complexity": [1, 6], // 添加復(fù)雜度
"curly": 2, // ??? 要求遵循大括號約定
"default-case": 1, // 要求 Switch 語句中有 Default 分支
"dot-location": [2, 'property'], // 強制在點號之前換行
"dot-notation": 2, // 點號和字面量瘸羡,優(yōu)先使用點號
"eqeqeq": [2, 'smart'], // ??? 要求使用 === 和 !==
"guard-for-in": 2, // ??? 需要約束 for-in
"no-caller": 2, // 禁用 caller 或 callee
"no-empty-function": 2, // 禁止出現(xiàn)空函數(shù)
"no-empty-pattern": 2, // 禁止使用空解構(gòu)模式
"no-eval": 2, // 禁用 eval()
"no-global-assign": 2, // 禁止對原生對象或只讀的全局對象進行賦值
"no-floating-decimal": 2, // ?? 禁止浮點小數(shù)
"no-fallthrough": 2, // 禁止 case 語句落空
"no-labels": 2, // 禁用標簽語句
"no-extra-label": 2, // 禁用不必要的標簽
"no-extra-bind": 2, // 禁止不必要的函數(shù)綁定
"no-iterator": 2, // 禁用迭代器
"no-lone-blocks": 2, // 禁用不必要的嵌套塊
"no-loop-func": 2, // 禁止循環(huán)中存在函數(shù)
"no-magic-numbers": [2, {
"ignoreArrayIndexes": true,
"ignore": [-1, 0, 1, 2],
}], // 禁止使用魔術(shù)數(shù)字漩仙,魔術(shù)數(shù)字是在代碼中多次出現(xiàn)的沒有明確含義的數(shù)字。它最好由命名常量取代。
"no-multi-spaces": 2, // 禁止出現(xiàn)多個空格
"no-multi-str": 2, // 禁止多行字符串
"no-new": 2, // 禁止在不保存實例的情況下使用new
"no-new-func": 2, // 禁用Function構(gòu)造函數(shù)
"no-new-wrappers": 2, // 禁止原始包裝實例
"no-octal": 2, // 禁用八進制字面量
"no-octal-escape": 2, // 禁止在字符串字面量中使用八進制轉(zhuǎn)義序列
"no-param-reassign": 2, // ??? 禁止對函數(shù)參數(shù)再賦值
"no-proto": 2, // 禁用__proto__队他,改用 getPrototypeOf 方法替代 __proto__卷仑。
"no-redeclare": 2, // 禁止重新聲明變量
"no-return-assign": 2, // 禁止在返回語句中賦值
"no-return-await": 2, // 禁用不必要的 return await
"no-script-url": 2, // 禁用 Script URL
"no-self-assign": 2, // 禁止自身賦值
"no-sequences": 2, // ??? 不允許使用逗號操作符
"no-throw-literal": 2, // 限制可以被拋出的異常
"no-unmodified-loop-condition": 2, // 禁用一成不變的循環(huán)條件
"no-useless-call": 2, // 禁用不必要的 .call() 和 .apply()
"no-useless-concat": 2, // 禁止沒有必要的字符拼接
"no-useless-escape": 2, // 禁用不必要的轉(zhuǎn)義
"no-useless-return": 2, // 禁止多余的 return 語句
"no-void": 2, // 禁止使用void操作符
"no-with": 2, // 禁用 with 語句
"prefer-promise-reject-errors": 1, // ??? 要求使用 Error 對象作為 Promise 拒絕的原因
"radix": 1, // 要求必須有基數(shù)
"require-await": 2, // 禁止使用不帶 await 表達式的 async 函數(shù)
"vars-on-top": 2, // 要求將變量聲明放在它們作用域的頂部
"wrap-iife": [2, 'inside'], // 需要把立即執(zhí)行的函數(shù)包裹起來
"strict": [2, 'global'], // 要求或禁止使用嚴格模式指令
/**
* 變量相關(guān)的規(guī)則
*/
"init-declarations": 2, // ??? 強制或禁止變量聲明語句中初始化
"no-delete-var": 2, // 禁止刪除變量
"no-shadow": 2, // 禁止變量聲明覆蓋外層作用域的變量
"no-shadow-restricted-names": 2, // 關(guān)鍵字不能被遮蔽
"no-undef": 2, // 禁用未聲明的變量
"no-unused-vars": 1, // ??? 禁止未使用過的變量
"no-use-before-define": 2, // 禁止定義前使用
// 代碼風格
"array-bracket-newline": [2, 'consistent'], // 在數(shù)組開括號后和閉括號前強制換行
"array-bracket-spacing": 2, // 強制在括號內(nèi)前后使用空格
"array-element-newline": [2, { "multiline": true }], // ??? 強制數(shù)組元素間出現(xiàn)換行
"block-spacing": 2, // 強制在代碼塊中開括號前和閉括號后有空格
"brace-style": 2, // 大括號風格要求
"camelcase": 2, // 要求使用駱駝拼寫法
"comma-dangle": [2, 'always-multiline'], // 要求或禁止使用拖尾逗號
"comma-spacing": 2, // 強制在逗號周圍使用空格
"comma-style": 2, // 逗號風格
"computed-property-spacing": 2, // 禁止或強制在計算屬性中使用空格
"consistent-this": [2, 'self'], // ??? 要求一致的 This
"eol-last": [1, 'always'], // ??? 要求或禁止文件末尾保留一行空行
"func-call-spacing": 2, // 要求或禁止在函數(shù)標識符和其調(diào)用之間有空格
"func-style": [2, 'declaration'], // ??? 強制 function 聲明或表達式的一致性
"function-paren-newline": [1, 'multiline'], // 強制在函數(shù)括號內(nèi)使用一致的換行
"indent": [2, 2], // 強制使用一致的縮進
"jsx-quotes": 2, // 強制在 JSX 屬性中一致地使用雙引號或單引號
"key-spacing": 2, // 強制在對象字面量的鍵和值之間使用一致的空格
"keyword-spacing": 2, // 強制關(guān)鍵字周圍空格的一致性
"linebreak-style": 2, // 強制使用一致的換行符風格,用\n麸折,不用\r\n
"lines-around-comment": 2, // 強制注釋周圍有空行
"lines-between-class-members": 2, // 要求在類成員之間出現(xiàn)空行
"max-depth": 2, // 強制塊語句的最大可嵌套深度
"max-len": [2, { // 強制行的最大長度
"code": 100,
"tabWidth": 4,
"ignoreUrls": true,
"ignoreTrailingComments": true,
"ignoreTemplateLiterals": true,
}], //
"max-lines": [2, 1000], // ??? 強制文件的最大行數(shù)
"max-nested-callbacks": [2, 5], // 強制回調(diào)函數(shù)最大嵌套深度
"max-statements-per-line": 2, // 強制每一行中所允許的最大語句數(shù)量
"multiline-comment-style": 1, // 強制對多行注釋使用特定風格
"new-cap": 2, // 要求構(gòu)造函數(shù)首字母大寫
"new-parens": 2, // 要求調(diào)用無參構(gòu)造函數(shù)時帶括號
"newline-per-chained-call": 2, // 要求方法鏈中每個調(diào)用都有一個換行符
"no-bitwise": 2, // 禁止使用按位操作符
"no-inline-comments": 0, // ??? 禁止使用內(nèi)聯(lián)注釋
"no-lonely-if": 2, // 禁止 if 語句作為唯一語句出現(xiàn)在 else 語句塊中
"no-mixed-spaces-and-tabs": 2, // 禁止使用 空格 和 tab 混合縮進
"no-multiple-empty-lines": 1, // ??? 不允許多個空行
"no-negated-condition": 2, // 禁用否定表達式
"no-nested-ternary": 2, // 禁止使用嵌套的三元表達式
"no-new-object": 2, // 禁止使用 Object 構(gòu)造函數(shù)
"no-trailing-spaces": 2, // 禁用行尾空白
"no-underscore-dangle": 2, // 禁止標識符中有懸空下劃線
"quotes": [2, 'single'], // 強制使用一致的單引號
"quote-props": [2, 'as-needed'], // ??? 要求對象字面量屬性名稱使用引號
"operator-linebreak": [2, 'before'], // 強制操作符使用一致的換行符風格
"one-var": [2, 'never'], // ??? 強制函數(shù)中的變量在一起聲明或分開聲明
"object-property-newline": 1, // ??? 強制將對象的屬性放在不同的行上
"object-curly-spacing": [2, 'always'], // 強制在花括號中使用一致的空格
"object-curly-newline": [1, { // ??? 對象屬性換行
multiline: true,
}], //
"no-whitespace-before-property": 2, // 禁止屬性前有空白
"no-unneeded-ternary": 2, // 禁止可以表達為更簡單結(jié)構(gòu)的三元操作符
"semi-spacing": 2, // 強制分號前后有空格
"semi-style": 2, // 分號風格
"space-before-blocks": [2, 'always'], // 禁止語句塊之前的空格
"space-before-function-paren": [2, 'never'], // 禁止函數(shù)圓括號之前有一個空格
"space-in-parens": 2, // 禁止或強制圓括號內(nèi)的空格
"space-infix-ops": 2, // 要求中綴操作符周圍有空格
"space-unary-ops": 2, // 禁止在一元操作符之前或之后存在空格
"spaced-comment": 2, // 要求在注釋前有空白
"switch-colon-spacing": 2, // 強制在 switch 的冒號左右有空格
"template-tag-spacing": 2, // 要求在模板標記和它們的字面量之間有空格
/**
* ES6相關(guān)規(guī)則
*/
"arrow-parens": [2, 'as-needed'], // 要求箭頭函數(shù)的參數(shù)使用圓括號
"arrow-body-style": 2, // 要求箭頭函數(shù)體使用大括號
"arrow-spacing": 2, // 要求箭頭函數(shù)的箭頭之前或之后有空格
"generator-star-spacing": 2, // ??? 強制 generator 函數(shù)中 * 號周圍有空格
"no-class-assign": 2, // 不允許修改類聲明的變量
"no-confusing-arrow": 2, // 禁止在可能與比較操作符相混淆的地方使用箭頭函數(shù)
"no-const-assign": 2, // 不允許改變用const聲明的變量
"no-dupe-class-members": 2, // 不允許類成員中有重復(fù)的名稱
"no-duplicate-imports": 2, // 禁止重復(fù)導(dǎo)入
"no-new-symbol": 0, // 禁止 Symbol 操作符和 new 一起使用lines-between
"no-useless-computed-key": 2, // 禁止在對象中使用不必要的計算屬性
"no-useless-constructor": 2, // 禁用不必要的構(gòu)造函數(shù)
"no-useless-rename": 2, // 禁止在 import 和 export 和解構(gòu)賦值時將引用重命名為相同的名字
"no-var": 2, // 要求使用 let 或 const 而不是 var
"object-shorthand": 2, // 要求對象字面量簡寫語法
"prefer-arrow-callback": 2, // 要求使用箭頭函數(shù)作為回調(diào)
"prefer-const": 1, // ??? 建議使用const
"prefer-destructuring": [2, { // 優(yōu)先使用數(shù)組和對象解構(gòu)
"array": false,
"object": true
}],
"prefer-rest-params": 2, // 使用剩余參數(shù)代替 arguments
"prefer-spread": 2, // 建議使用擴展運算符而非.apply()
"prefer-template": 2, // 建議使用模板而非字符串連接
"require-yield": 2, // 禁用函數(shù)內(nèi)沒有yield的 generator 函數(shù)
"rest-spread-spacing": 2, // 強制剩余和擴展運算符及其表達式之間有空格
"template-curly-spacing": 2, // 強制模板字符串中空格的使用
"sort-imports": [0, { // ??? import 排序 問題是要以字母排序
"ignoreCase": true,
"ignoreMemberSort": true,
"memberSyntaxSortOrder": ['all', 'single', 'multiple', 'none']
}], //
}
};
如果有需要什么問題 可以留言討論N!9柑洹窜锯!