主頁 > 企業開發 > 專案常用eslint配置(Vue/React/TypeScript)

專案常用eslint配置(Vue/React/TypeScript)

2020-09-30 08:27:00 企業開發

專案常用eslint配置(Vue/React/TypeScript)

記錄一下常用的eslint配置,

Vue專案常用eslint配置

需要安裝依賴(Vue這里使用standard擴展和vue插件,所以需要安裝)

{  
    "devDependencies": {
        "babel-eslint": "^10.0.2",
        "eslint": "^6.1.0",
        "eslint-config-imperative-es6": "^2.1.0",
        "eslint-config-standard": "^10.2.1",
        "eslint-plugin-import": "^2.17.2",
        "eslint-plugin-node": "^5.2.0",
        "eslint-plugin-promise": "^3.4.0",
        "eslint-plugin-standard": "^3.0.1",
        "eslint-plugin-vue": "^4.7.1" // vue插件
    }
}

.eslintrc.js檔案配置

// https://eslint.org/docs/user-guide/configuring

module.exports = {
    // 默認情況下,ESLint 會在所有父級目錄里尋找組態檔,一直到根目錄,ESLint 一旦發現組態檔中有 "root": true,它就會停止在父級目錄中尋找,
    root: true, 
    parserOptions: { // 決議器選項
        parser: 'babel-eslint' // 一個對Babel決議器的包裝,使其能夠與 ESLint 兼容
    },
    // 環境的全域變數
    env: {  
        browser: true,
        node: true,
        jquery: true
    },
    // 組態檔可以被基礎配置中的已啟用的規則繼承,
    extends: [
        // https://github.com/guidesmiths/eslint-config-imperative-es6
        'imperative-es6',
        // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
        // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
        'plugin:vue/essential',
        // https://github.com/standard/standard/blob/master/docs/RULES-en.md
        'standard'  // 使用eslint-plugin-standard擴展(挺好用的
    ],
    // 配置插件名字,可以省略'eslint-plugin-'前綴,使用前要用npm安裝,
    plugins: [
        'vue'
    ],
    // 添加規則,配置定義在插件中的一個規則的時候,你必須使用 插件名/規則ID 的形式,
    // 常用規則官網:http://eslint.cn/docs/rules/
    rules: {
        'indent': ['error', 4],
        'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
        'linebreak-style': 'off', // 強制使用一致的換行分隔 LF or CRLF
        'array-callback-return': 'off'
    }
    // 若要禁用一組檔案的組態檔中的規則,請使用 overrides 和 files,例如:
    // overrides: 
    // [{
    //     "files": ["*-test.js","*.spec.js"],
    //     "rules": {
    //         "no-unused-expressions": "off"
    //     }
    // }]
}

React專案常用eslint配置

同樣安裝依賴,React這里使用的airbnb擴展,安裝eslint-import-resolver-webpack用來解決webpack中設定的別名eslint無法識別報錯的問題,

{  
    "devDependencies": {
        "babel-eslint": "^10.0.2",
        "eslint": "^6.1.0",
        "eslint-config-airbnb": "^18.0.1",
        "eslint-import-resolver-webpack": "^0.12.1",
        "eslint-plugin-import": "^2.20.1",
        "eslint-plugin-jsx-a11y": "^6.2.3",
        "eslint-plugin-node": "^11.0.0",
        "eslint-plugin-promise": "^4.2.1",
        "eslint-plugin-react": "^7.14.3"
    }
}

.eslintrc.js檔案配置

module.exports={
    env: {
        browser: true,
        commonjs: true,
        node: true,
        es6: true
    },
    extends: [
        'airbnb' // airbnb擴展
    ],
    globals: {
        $: true,
        process: true,
        __dirname: true
    },
    parser: 'babel-eslint',
    parserOptions: {
        ecmaFeatures: {
            jsx: true
        },
        sourceType: 'module'
    },
    plugins: [
        'react' // react插件
    ],
    // 用來處理webpack中指定別名但eslint未能識別報的錯
    settings: {
        "import/resolver": {
            webpack: {
                config: './build/webpack.base.conf.js'  // 指定webpack組態檔路徑
            }
        }
    },
    // https://github.com/yannickcr/eslint-plugin-react
    rules: {
        "no-console": 0, //不禁用console
        "no-irregular-whitespace": 0, //不規則的空白不允許
        "react/jsx-filename-extension": [1, {"extensions": [".js", ".jsx"]}],//檔案是.js還是.jsx
        "no-underscore-dangle": 0,
        "array-bracket-spacing": [2, 'never'], // 指定陣列的元素之間要以空格隔開(,后面)
        "comma-dangle": 2, // 陣列和物件鍵值對最后一個逗號, never引數:不能帶末尾的逗號, always引數:必須帶末尾的逗號
    }
}

附上rules其他rules規則:

{
    "rules": {
        // off=0, warn=1, error=2, 如果是陣列, 第二項表示引數option
        "indent": [2, 2], // 控制縮進為2
        "eqeqeq": 1,// 警告使用全等
        "quotes": [2, "single"], //單引號
        "no-console": 0, //不禁用console
        "no-debugger": 1, //警告debugger
        "no-var": 2, //對var禁止
        "semi": 2, //強制使用分號
        "semi-spacing": [2, {"before": false, "after": true}], // 強制分號前后不允許空格
        "no-irregular-whitespace": 0, //不規則的空白不允許
        "no-trailing-spaces": 'error', //一行結束后面有空格就發出警告
        "eol-last": 0, //檔案以單一的換行符結束
        "no-unused-vars": [2, {"vars": "all", "args": "after-used"}], //不能有宣告后未被使用的變數或引數
        "no-underscore-dangle": 0, //識別符號不能以_開頭或結尾
        "no-alert": 2, //禁止使用alert confirm prompt
        "no-lone-blocks": 0, //禁止不必要的嵌套塊
        "no-class-assign": 2, //禁止給類賦值
        "no-cond-assign": 2, //禁止在條件運算式中使用賦值陳述句
        "no-const-assign": 2, //禁止修改const宣告的變數
        "no-delete-var": 2, //不能對var宣告的變數使用delete運算子
        "no-dupe-keys": 2, //在創建物件字面量時不允許鍵重復
        "no-duplicate-case": 2, //switch中的case標簽不能重復
        "no-dupe-args": 2, //函式引數不能重復
        "no-empty": 2, //塊陳述句中的內容不能為空
        "no-func-assign": 2, //禁止重復的函式宣告
        "no-invalid-this": 0, //禁止無效的this,只能用在構造器,類,物件字面量
        "no-redeclare": 2, //禁止重復宣告變數
        "no-spaced-func": 2, //函式呼叫時 函式名與()之間不能有空格
        "no-this-before-super": 0, //在呼叫super()之前不能使用this或super
        "no-undef": 2, //不能有未定義的變數
        "no-use-before-define": 2, //未定義前不能使用
        "camelcase": 0, //強制駝峰法命名
        "jsx-quotes": [2, "prefer-double"], //強制在JSX屬性(jsx-quotes)中一致使用雙引號
        "react/display-name": 0, //防止在React組件定義中丟失displayName
        "react/forbid-prop-types": 0, //禁止某些propTypes
        "react/jsx-boolean-value": 0, //在JSX中強制布爾屬性符號
        "react/jsx-closing-bracket-location": 0, //在JSX中驗證右括號位置
        "react/jsx-curly-spacing": [2, {"when": "never", "children": true}], //在JSX屬性和運算式中加強或禁止大括號內的空格,
        "react/jsx-indent": [2,2], // 語法縮進控制
        "react/jsx-indent-props": [2, 2], //驗證JSX中的props縮進是否為2個
        "react/jsx-key": 2, //在陣列或迭代器中驗證JSX具有key屬性
        "react/jsx-max-props-per-line": 0, // 限制JSX中單行上的props的最大數量
        "react/jsx-no-bind": 0, //JSX中不允許使用箭頭函式和bind
        "react/jsx-no-duplicate-props": 2, //防止在JSX中重復的props
        "react/jsx-no-literals": 0, //防止使用未包裝的JSX字串
        "react/jsx-no-undef": 1, //在JSX中禁止未宣告的變數
        "react/jsx-pascal-case": 0, //為用戶定義的JSX組件強制使用PascalCase
        "react/jsx-sort-props": 0, //強化props按字母排序
        "react/jsx-uses-react": 1, //防止反應被錯誤地標記為未使用
        "react/jsx-uses-vars": 2, //防止在JSX中使用的變數被錯誤地標記為未使用
        "react/no-danger": 0, //防止使用危險的JSX屬性
        "react/no-did-mount-set-state": 0, //防止在componentDidMount中使用setState
        "react/no-did-update-set-state": 1, //防止在componentDidUpdate中使用setState
        "react/no-direct-mutation-state": 2, //防止this.state的直接變異
        "react/no-multi-comp": 0, //防止每個檔案有多個組件定義
        "react/no-set-state": 0, //防止使用setState
        "react/no-unknown-property": 2, //防止使用未知的DOM屬性
        "react/prefer-es6-class": 2, //為React組件強制執行ES5或ES6類
        "react/prop-types": 0, //防止在React組件定義中丟失props驗證
        "react/react-in-jsx-scope": 2, //使用JSX時防止丟失React
        "react/self-closing-comp": 0, //防止沒有children的組件的額外結束標簽
        "react/sort-comp": 2, //強制組件方法順序
        "no-extra-boolean-cast": 0, //禁止不必要的bool轉換
        "react/no-array-index-key": 0, //防止在陣列中遍歷中使用陣列key做索引
        "react/no-deprecated": 1, //不使用棄用的方法
        "react/jsx-equals-spacing": 2, //在JSX屬性中強制或禁止等號周圍的空格
        "no-unreachable": 1, //不能有無法執行的代碼
        "comma-dangle": [2, "never"], //物件字面量項尾必須有逗號
        "no-mixed-spaces-and-tabs": 0, //禁止混用tab和空格
        "prefer-arrow-callback": 0, //比較喜歡箭頭回呼
        "arrow-parens": 0, //箭頭函式用小括號括起來
        "arrow-spacing": [
            'error',
            {
                before: true,
                after: true
            }
        ],
        "prefer-const": ["error", {
            "destructuring": "all"
            }
        ],
        "prefer-destructuring": ["error", {
            "VariableDeclarator": {
                "array": false,
                "object": true
            },
            "AssignmentExpression": {
                "array": false,
                "object": false
            }
        }, {
            "enforceForRenamedProperties": false
            }
        ],
        "use-isnan": 2,//禁止比較時使用NaN,只能用isNaN()
        // @fixable 代碼塊如果在一行內,那么大括號內的首尾必須有空格,比如 function () { alert('Hello') }
        'block-spacing': [
            'error',
            'always'
        ],
        // @fixable 函式名和執行它的括號之間禁止有空格
        'func-call-spacing': [
            'error',
            'never'
        ],
        // @fixable if, function 等的大括號之前必須要有空格,比如 if (a) {
        'space-before-blocks': [
            'error',
            'always'
        ],
        // @fixable function 的小括號之前必須要有空格
        'space-before-function-paren': [
            'error',
            {
                anonymous: 'ignore',
                named: 'never',
                asyncArrow: 'always'
            }
        ],
        // @fixable 小括號內的首尾禁止有空格
        'space-in-parens': [
            'error',
            'never'
        ],
        // @fixable 運算子左右必須有空格,比如 let sum = 1 + 2;
        'space-infix-ops': 'error',
        // @fixable new, typeof 等后面必須有空格,++, -- 等禁止有空格,比如:
        // let foo = new Person();
        // bar = bar++;
        'space-unary-ops': [
            'error',
            {
                words: true,
                nonwords: false
            }
        ],
        'switch-colon-spacing': [
            'error',
            {
                after: true,
                before: false
            }
        ],
        'arrow-spacing': [
            'error',
            {
                before: true,
                after: true
            }
        ],
        'comma-spacing': [
            'error',
            {
                before: false,
                after: true
            }
        ],
        'keyword-spacing': [
            'error',
            {
                before: true,
                after: true
            }
        ]
    }
}

TypeScript+React專案常用eslint配置

需要安裝依賴@typescript-eslint(前提是已經安裝了typescript)

{  
    "devDependencies": {
        "@typescript-eslint/eslint-plugin": "^2.23.0",
        "@typescript-eslint/parser": "^2.23.0",
        "eslint": "^6.8.0",
        "eslint-config-airbnb-typescript": "^7.0.0",
        "eslint-import-resolver-webpack": "^0.12.1",
        "eslint-plugin-import": "^2.20.1",
        "eslint-plugin-jsx-a11y": "^6.2.3",
        "eslint-plugin-react": "^7.19.0",
        "eslint-plugin-react-hooks": "^1.7.0",`
    }
}

.eslintrc.js檔案配置

module.exports = {
    root: true,
    parser: '@typescript-eslint/parser',
    parserOptions: {
        project: './tsconfig.json',
    },
    plugins: [
        '@typescript-eslint',
    ],
    extends: [
        'airbnb-typescript',
        'eslint:recommended',
        'plugin:@typescript-eslint/eslint-recommended',
        'plugin:@typescript-eslint/recommended',
    ],
    // 用來處理webpack中指定別名但eslint未能識別報的錯
    settings: {
        "import/resolver": {
            webpack: {
                config: './build/webpack.base.conf.js'  // 指定webpack組態檔路徑
            }
        }
    },
    rules: {
        "react/state-in-constructor": 0,
        "comma-dangle": [2, 'always-multiline'],
        "no-console": 0, //不禁用console
        "no-irregular-whitespace": 0, //不規則的空白不允許
        "no-underscore-dangle": 0,
        "array-bracket-spacing": [2, 'never'] // 指定陣列的元素之間要以空格隔開(,后面)
    }
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/141442.html

標籤:JavaScript

上一篇:GET和POST的基本對比

下一篇:關于查看本機ssh公鑰以及生成公鑰

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more