eslint+prettier學習


eslint學習

配置文件:.eslintrc.js

常見配置字段

module.exports = {
  'parser':'esprima',
  'env': {
    'browser': true,
    'es6': true,
  },
  'extends': [
    'airbnb',
  ],
  'globals': {
    'Atomics': 'readonly',
    'SharedArrayBuffer': 'readonly',
  },
  'parserOptions': {
    'ecmaVersion': 2018,
    'sourceType': 'module',
    'ecmaFeatures': {
        'jsx': true
     }
  },
  'rules': {
    'semi': 'error'
  },
};

 

配置字段解析

詳情參考文檔

extends:[]

配置文件可以從基本配置擴展啟用的規則集,不添加則不會繼承任何擴展集,僅按照rules下的基本配置來執行。

可以擴展的規則常見的有:

airbnb(世界第一)

安裝依賴包

npm install eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-import eslint-config-airbnb --save

{
"extends": "airbnb" }

 

規則特點

不去掉分號

自動把import引入的包放在了最上面

不希望有console,有會報警告

if語句如果沒有包大括號不會加大括號,會從兩行轉為一行

多個import后面加一個空行

字符串使用單引號

縮進為2個空格

未定義的變量會報錯

箭頭函數前后需要空格

未使用的變量會報錯

standard(世界第二)

安裝依賴包

npm install --save-dev eslint-config-standard eslint-plugin-standard eslint-plugin-promise eslint-plugin-import eslint-plugin-node

{
"extends": "standard" }

 

規則特點

去掉分號

if語句會自動加大括號,兩行轉為一行

縮進2個空格

字符串使用單引號

自動把import引入的包放在了最上面

多個Import之間有空行,最后一個import之后不會有空行

未定義的變量會報錯

箭頭函數前后需要空格

未使用的變量會報錯

alloy(世界第三)

AlloyTeam ESLint 規則不僅是一套先進的適用於 React/Vue/Typescript 項目的 ESLint 配置規范,而且也是你配置個性化 ESLint 規則的最佳參考。騰訊開源eslint規則,目前主要是對代碼規則的校驗,不包含格式校驗。

npm install --save-dev eslint babel-eslint eslint-config-alloy
module.exports = {
  extends: [
    'alloy',
  ],
  env: {
    // Your environments (which contains several predefined global variables)
    //
    // browser: true,
    // node: true,
    // mocha: true,
    // jest: true,
    // jquery: true
  },
  globals: {
    // Your global variables (setting to false means it's not allowed to be reassigned)
    //
    // myGlobal: false
  },
  rules: {
    // Customize your rules
  },
};

google

安裝依賴包

npm install --save-dev eslint-config-google

規則特點

不去掉分號

字符串使用單引號

相對上面兩個力度較小,import沒有自動提到最上面,

未定義的變量不會報錯

縮進為2個空格

箭頭函數前后沒有空格要求

未使用的變量會報錯

eslint:recommended

粒度比較小,依然支持雙引號,也沒有空格,僅報錯了未定義的變量和未使用的變量

eslint:all

粒度相當大,各種空行,console.log里都是換行,if語句里面都是空行,import不會提到前面

plugin:prettier/recommended

即prettier規則。

使用此規則的方式見下面 :eslint+prettier配合配置 

大概看出的幾個共同點

都會把沒有改變過的變量從let定義改為const定義

字符串都轉為單引號

該有的空格都有

未使用的變量會報錯 

嚴格程度排名

airbnb>standard>alloy>google

 

plugins:[]

ESLint支持使用第三方插件。在使用插件之前,您必須使用npm安裝它。

插件:

eslint-plugin-html

一個ESLint插件,用於整理和修復HTML文件中包含的內聯script腳本,支持多個script標簽,此行為不適用於“模塊”腳本(即:<script type="module">)

https://www.npmjs.com/package/eslint-plugin-html

配置方式:

在 .eslintrc.js中的plugin中加入html

{
    "plugins": [
        "html"
    ]
}

 

rules:[]

配合代碼規則:

  • "off"0-關閉規則
  • "warn"1-將該規則作為警告打開(不影響退出代碼)
  • "error"2-將規則作為錯誤打開(觸發時退出代碼為1)

parserOptions:{}

解析器選項,主要用於解析JavaScript的語言選項

ecmaVersion:JavaScript版本

sourceType:script還是module

 

eslint常用幾個命令

eslint --init  **/*.js     初始化創建默認eslint配置

eslint --fix **/*.js       修復問題

注意:使用項目中的eslint,命令為    npx eslint --fix **/*.js  

 

 

webpack eslint配置

{
  test: /\.js$/,
    use: [
      {
        loader: "babel-loader",
      },
      {
        loader: "eslint-loader",// 這里的配置項參數將會被傳遞到 eslint 的 CLIEngine
        options: {
          fix: true,// 保存自動格式化開啟
          formatter: require('eslint-friendly-formatter') // 指定錯誤報告的格式規范
        }
      },
    ],
      enforce: "pre",
      include: [path.resolve(__dirname, 'src')], // 指定檢查的目錄
  },

 

 

prettier學習

作用

prettier 主要是為了格式化代碼,而在沒有 prettier 之前,是用 eslint —fix和 編輯器自帶代碼格式來進行代碼格式化的。

  • 缺點:每種編輯器會有不一樣的代碼格式,而且配置會比較麻煩。
  • prettier 已經逐漸成為業界主流的代碼風格格式化工具。
  • 減輕 eslint 等工具的校驗規則,因為將代碼樣式校驗交給了 prettier,所以可以將代碼校驗的規則更准確地應用到代碼真正的規范上面。

 

安裝

First, install Prettier locally:

prettier需要精確安裝,

npm install --save-dev --save-exact prettier

Then, create an empty config file to let editors and other tooling know you are using Prettier:

echo {}> .prettierrc.json​ 

Next, create a .prettierignore file to let the Prettier CLI and editors know which files to not format. Here’s an example:

# Ignore artifacts:

build
coverage

命令

prettier --check **/*.js

prettier --write **/*.js

注意:使用項目中的eslint,命令為 npx prettier --write **/*.js

 

eslint+prettier配合配置

eslint 是主要還是負責代碼規則校驗,prettier 只調整代碼風格,代碼樣式,eslint 才是真正檢查代碼是否符合規范的工具。兩者分工不同,所以需要配合使用。

 

了解配合配置的方式,先來了解幾個npm包

插件:

eslint-plugin-prettier

作用:一個形式上跟standard類似的一個代碼規則,用來在基礎規則上擴展的規則,eslint的rules規則優先級大於prettier的規則。

提示:eslint-plugin-prettier不會為您安裝Prettier或ESLint,你必須自己安裝。

使用prettier的擴展規則有兩種方式:

注意:不需要寫extends:"prettier",光下面的配置即可

方式一:

{
  "plugins": ["prettier"],
  "rules": {
    "prettier/prettier": "error"
    // "prettier/prettier": ["error", {"singleQuote": true, "parser": "flow"}] 這里的配置會覆蓋.prettierrc.js的配置
    // "prettier/prettier": ["error", {}, {
    //      "usePrettierrc": true
        //  }] // 開啟這個配置,可以指定使用.prettierrc.js配置,不會和其他配置沖突
  }
}

 

方式二:

extends: [
    'plugin:prettier/recommended',
],

 

兩種區別:

方式一:兩種規則會有沖突

方式二:兩種規則沒有沖突,會自動去掉eslint沖突的規則,配置簡單。

重點:

如果使用方式二,需配合 eslint-config-prettier

作用:禁用與lint相關的所有格式化規則。

注意:

由於編輯器等自動格式化配置設置了走.prettierrc.js文件,建議寫覆蓋的配置,寫在這里,不要寫在.eslintrc.js配置中,否則可能得不到想要的結果。

安裝插件:

注意:為了避免不同人安裝的的prettier版本不同導致的代碼格式化規則不同,建議安裝prettier使用精確版本安裝。

npm install --save-dev --save-exact prettier 
npm install --save-dev eslint-plugin-prettier eslint-config-prettier

 

規則沖突示例:

可以看到同一行的同樣的錯誤會拋出兩個版本的錯誤信息

3:19  error  Replace `"axios"` with `'axios';`  prettier/prettier // prettier拋出
3:19  error  Strings must use singlequote       quotes   // esLint拋出

 

使用方式二后,prettier的規則會覆蓋掉standard相同的規則

最終配置

樣式格式校驗

stylelint

npm install stylelint --save-dev

 

stylelint-config-prettier

npm install --save-dev stylelint-config-prettier

 

Then, append stylelint-config-prettier to the extends array in your .stylelintrc.* file. Make sure to put it last, so it will override other configs.

{
  "extends": [
    // other configs ...
    "stylelint-config-prettier"
  ]
}
 

 

stylelint-config-recommended

所有樣式問題都會暴露

npm install stylelint-config-recommended --save-dev

 

stylelint-config-standard

stylelint-config-standard是stylelint的推薦配置

stylelint-order是 css 屬性排序插件

npm install stylelint-config-standard --save-dev

stylelint-order

npm install stylelint-order --save-dev
{
    "plugins": [
        "stylelint-order"
    ],
    "rules": {
        "order/order": [
            "custom-properties",
            "declarations"
        ],
        "order/properties-order": [
            "width",
            "height"
        ]
    }
}

 

代碼檢查

npx stylelint "**/*.css"

 

.eslintrc.js

module.exports = {
    extends: [
        'alloy',
        'plugin:prettier/recommended',
    ],
    parserOptions: {
        parser: 'babel-eslint',
        sourceType: 'module',
    },
    // parser: '@typescript-eslint/parser',
    // plugins: ['@typescript-eslint'],
    rules: {
        // "prettier/prettier": "error", 
    },
    env: {
        browser: true,
        node: true,
        jest: true,
        es2017: true,
    },
    // plugins: ['html', 'prettier'],
    plugins: ['html'],
}

 

.prettierrc.js

module.exports = {
    // 一行最多 80 字符
    printWidth: 80,
    // 使用 4 個空格縮進
    tabWidth: 4,
    // 不使用縮進符,而使用空格
    useTabs: false,
    // 行尾需要有分號
    semi: false,
    // 使用單引號
    singleQuote: true,
    // 對象的 key 僅在必要時用引號
    quoteProps: 'as-needed',
    // jsx 不使用單引號,而使用雙引號
    jsxSingleQuote: false,
    // 末尾不需要逗號
    trailingComma: 'none',
    // 大括號內的首尾需要空格
    bracketSpacing: true,
    // jsx 標簽的反尖括號需要換行
    jsxBracketSameLine: false,
    // 箭頭函數,只有一個參數的時候,也需要括號
    arrowParens: 'always',
    // 每個文件格式化的范圍是文件的全部內容
    rangeStart: 0,
    rangeEnd: Infinity,
    // 不需要寫文件開頭的 @prettier
    requirePragma: false,
    // 不需要自動在文件開頭插入 @prettier
    insertPragma: false,
    // 使用默認的折行標准
    proseWrap: 'preserve',
    // 根據顯示樣式決定 html 要不要折行
    htmlWhitespaceSensitivity: 'css',
    // 換行符使用 lf
    endOfLine: 'lf'
};

.stylelintrc.js

module.exports = {
    extends: [
        'stylelint-config-standard',
        'stylelint-config-prettier',
        'stylelint-config-sass-guidelines',
    ],
    plugins: [
        'stylelint-order',
        'stylelint-scss'
    ],
    rules: {
        "order/order": [
            "custom-properties",
            "declarations"
        ],
        "order/properties-order": [
            "width",
            "height"
        ]
    }
};

 

如果不用scss,建議直接這樣配置:

scss的一些規則會和常規使用的規則不太一樣。

module.exports = {
    extends: ['stylelint-config-standard'],
    // "plugins": [
    //     // "stylelint-csstree-validator"
    // ],
    rules: {
        'color-named': ['never',{ignoreProperties: ['background','color']}], // never  強制使用十六進制,always-where-possible 強制使用單詞命名
        // "csstree/validator": true, // 檢查屬性值和屬性名是否正確
        'string-quotes':'double', // double 雙引號,single,單引號
        // 'block-opening-brace-newline-after':'always-multi-line' // 大括號后是否另一一行
    }
}

參考鏈接

https://juejin.im/post/6844903621805473800

https://juejin.im/post/6844903843541549063

https://segmentfault.com/a/1190000022881634 【好文推薦】https://juejin.im/post/6844903832485363720【好文推薦】

https://github.com/AlloyTeam/eslint-config-alloy/blob/master/README.zh-CN.md

https://prettier.io/

https://eslint.org/

https://stylelint.io/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM