Prettier與ESLint:代碼風格與質量的自動化保證

Prettier 和 ESLint 是兩個互補的工具,它們共同確保代碼的風格一致性和質量。Prettier 負責格式化代碼,而 ESLint 則執行更復雜的靜態分析和規則檢查。

2500G計算機入門到高級架構師開發資料超級大禮包免費送!

Prettier

作用:

自動化代碼格式化,確保代碼的縮進、括號、引號、換行等樣式一致。
不需要配置太多的規則,因為Prettier有一套默認的代碼風格。
支持多種編程語言,包括JavaScript、TypeScript、CSS、HTML等。
可以與ESLint集成,避免兩者規則沖突。
使用示例: 在項目根目錄下創建 .prettierrc.prettierrc.json 文件來配置Prettier,例如:

{"printWidth": 80, // 行寬"tabWidth": 2, // Tab寬度"useTabs": false, // 是否使用制表符"semi": true, // 是否使用分號"singleQuote": true, // 使用單引號"trailingComma": "all", // 尾隨逗號"bracketSpacing": true, // 對象花括號之間是否有空格"jsxBracketSameLine": false // JSX標簽閉合花括號是否在同一行
}

然后在項目中安裝Prettier:

npm install --save-dev prettier

并在.gitignore文件中排除Prettier生成的臨時文件。

ESLint

#### 作用:

  • 靜態代碼分析,檢測潛在的錯誤、代碼異味和不推薦的編程習慣。
  • 提供豐富的自定義規則,可以檢查代碼風格、變量使用、代碼復雜度等。
  • 可以與Prettier集成,先格式化再檢查,避免格式問題干擾實際的錯誤檢測。

使用示例: 創建 .eslintrc.js.eslintrc.yaml 配置文件:

module.exports = {env: {browser: true,es2021: true,},extends: ['plugin:react/recommended','airbnb-base',],parser: '@typescript-eslint/parser',parserOptions: {ecmaVersion: 12,sourceType: 'module',ecmaFeatures: {jsx: true,},},plugins: ['@typescript-eslint','react',],rules: {'no-console': 'off', // 關閉禁止console.log的規則'import/no-unresolved': 'error', // 報告未解析的導入},
};

安裝ESLint及其相關的插件:

npm install --save-dev eslint eslint-plugin-react @typescript-eslint/parser @typescript-eslint/eslint-plugin

在項目中使用npx eslint或配置IDE(如VSCode)的ESLint插件來進行實時檢查。

集成與自動化

通過eslint-plugin-prettier和eslint-config-prettier,可以在ESLint中集成Prettier:

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

然后在.eslintrc.js中添加以下內容:

module.exports = {// ...plugins: ['prettier'],extends: ['plugin:prettier/recommended'], // 使用Prettier的ESLint規則rules: {'prettier/prettier': 'error', // 把Prettier的規則設為錯誤級別// ...其他規則},
};

現在,當運行eslint --fix時,ESLint會先應用Prettier的格式化,然后再執行自己的檢查。

樣例配置文件

.prettierrc (Prettier配置)
{"semi": true,"trailingComma": "none","tabWidth": 2,"singleQuote": true,"printWidth": 120,"jsxSingleQuote": true,"arrowParens": "avoid","htmlWhitespaceSensitivity": "css","endOfLine": "lf"
}
1.2 .eslintrc.js (ESLint配置)
javascript
module.exports = {env: {browser: true,es6: true,},extends: ['airbnb-base','plugin:@typescript-eslint/recommended','plugin:prettier/recommended',],parser: '@typescript-eslint/parser',parserOptions: {ecmaVersion: 2020,sourceType: 'module',},plugins: ['@typescript-eslint', 'prettier'],rules: {'prettier/prettier': 'error','no-unused-vars': 'warn','no-console': 'warn',},
};

集成到構建流程

使用husky和lint-staged進行提交前的檢查

安裝依賴:

npm install --save-dev husky lint-staged

package.json中添加如下配置:

"husky": {"hooks": {"pre-commit": "lint-staged"}
},
"lint-staged": {"*.ts?(x)": ["prettier --write", "eslint --fix"],"*.js?(x)": ["prettier --write", "eslint --fix"],"*.html": ["prettier --write"],"*.css": ["prettier --write"]
}

這樣,在每次提交前,lint-staged會自動運行Prettier和ESLint,格式化和修復代碼。

配置IDE

在Visual Studio Code、WebStorm或其他支持ESLint和Prettier的IDE中,安裝對應的插件并配置自動格式化和檢查。

自定義規則

ESLint的靈活性允許你創建自定義規則以滿足特定項目需求。在.eslintrc.js中添加自定義規則:

rules: {'your-custom-rule': 'error',// ...
}

創建一個lib或rules目錄,然后在其中定義你的自定義規則模塊。

常見問題與解決方案

沖突處理

有時,Prettier和ESLint的規則可能會沖突。在這種情況下,通常優先遵循Prettier的規則,因為它專注于代碼格式。如果你需要特定的ESLint規則,可以在.eslintrc.js中禁用Prettier的對應規則:

rules: {'prettier/prettier': ['error', { singleQuote: false }] // 禁用Prettier的單引號規則
}
性能優化

如果ESLint運行緩慢,可以考慮以下優化:

僅在必要時運行:例如,只在修改了相關文件后運行。
使用–cache選項:ESLint將緩存已檢查的文件,以加快后續運行速度。
使用.eslintignore文件:排除不需要檢查的文件和目錄。

使用ESLint的插件和共享配置

插件

@typescript-eslint:為TypeScript提供額外的規則和錯誤修復。
eslint-plugin-import:檢查導入順序和導出規范。
eslint-plugin-react:針對React組件的特定規則。
eslint-plugin-react-hooks:檢查React Hooks的使用。
eslint-plugin-prettier:使ESLint與Prettier協同工作,防止沖突。

安裝這些插件:

npm install --save-dev eslint-plugin-import eslint-plugin-react eslint-plugin-react-hooks @typescript-eslint/eslint-plugin
共享配置
  • eslint-config-airbnb:Airbnb的編碼風格指南。
  • eslint-config-prettier:禁用與Prettier沖突的ESLint規則。

.eslintrc.js中使用共享配置:

module.exports = {extends: ['airbnb','airbnb-typescript','plugin:@typescript-eslint/recommended','plugin:import/recommended','plugin:react/recommended','plugin:react-hooks/recommended','plugin:prettier/recommended',],// ...
};
定制共享配置

根據項目需求,可以自定義共享配置,例如:

module.exports = {extends: ['airbnb','airbnb-typescript','plugin:@typescript-eslint/recommended','plugin:import/recommended','plugin:react/recommended','plugin:react-hooks/recommended','plugin:prettier/recommended',],rules: {'import/prefer-default-export': 'off', // 關閉非默認導出的警告'@typescript-eslint/explicit-module-boundary-types': 'off', // 關閉類型聲明的警告// 添加或修改其他規則},
};

高級用法

配置環境

.eslintrc.js中設置環境變量,以便啟用特定環境下的規則:

env: {browser: true,es6: true,node: true,jest: true,
}
使用ESLint的overrides字段

overrides允許你為特定類型的文件或目錄指定不同的規則。例如,為.test.js文件添加獨立的規則:

module.exports = {overrides: [{files: ['**/*.test.js'],rules: {'no-unused-expressions': 'off', // 在測試文件中關閉表達式不使用警告},},],// ...
};

部署到持續集成(CI)

將ESLint和Prettier集成到持續集成流程中,確保所有提交的代碼都符合標準。例如,在GitHub Actions中配置:

name: Lint and Formaton:push:branches:- mainpull_request:jobs:lint:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkout@v2- name: Setup Node.jsuses: actions/setup-node@v2with:node-version: '14.x'- name: Install dependenciesrun: npm ci- name: Lint and formatrun: npm run lint

2500G計算機入門到高級架構師開發資料超級大禮包免費送!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12860.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12860.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12860.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python數據清洗-找到重復的txt并輸出字數最少的

import os import json from collections import Counterdef find_and_write_duplicate_txt_files(root_folder, output_file):# 存儲所有找到的 txt 文件名和路徑的字典列表txt_files_dict_list []# 統計每個文件名出現的次數filename_counts Counter()# 遍歷文件夾及其子文…

nmap端口掃描工具——LInux

目錄 系統版本: nmap主要功能 安裝: nmap命令使用方法

SC8908電機驅動芯片替代AN41908

SC8908 描述 五路H橋靜音驅動電機驅動芯片,閉環直流電機光圈調節,支持霍爾位置檢測, 2個步進電機。步進電機驅動帶256微步細分。 主要特性 ? 步進驅動H橋每路250mA最大驅動電流 ? 光圈直流驅動H橋每路150mA最大驅動電流 ? 單獨…

web學習筆記(五十四)Vue

目錄 1.初始Vue 1.1 什么是Vue 1.2 Vue的特點 1.3 引入Vue 1.4 使用Vue 2. 數據綁定的方法 2.1 Mustache(雙大括號插值法) 2.2 v-text 2.3 v-html 3. 列表渲染 1.初始Vue 1.1 什么是Vue Vue 是一套用于構建用戶界面的漸進式JavaScript框架。…

1725 ssm資產管理系統myeclipse開發mysql數據庫springMVC模式java編程計算機網頁設計

一、源碼特點 java ssm資產管理系統是一套完善的web設計系統(系統采用SSM框架進行設計開發,springspringMVCmybatis),對理解JSP java編程開發語言有幫助,系統具有完整的源代碼和數據庫,系統主要采用B/…

libssh C++封裝之六(Dir)

1 概述 libssh是一個在客戶端和服務器端實現SSHv2協議的多平臺C庫。使用libssh,您可以遠程執行程序、傳輸文件、使用安全透明的隧道、管理公鑰等等。本文描述的對libssh客戶端功能的C++封裝。 libssh下載地址 3 實現 3.5 Dir Dir類型管理遠程路徑,通過SFTP和Channel實現(有…

uni u-form-item 只有圖標點擊有效

如下,輸入的地方是個選擇項,代碼如下: <u-form-item class=u-form-item label="監督主題" prop="themeName" borderBottom ref="item1" @click="openPopup(0)" > <u--input v-model="form.themeNam…

PTA--《面線對象程序設計》作業3-繼承與多態

目錄 一&#xff1a;函數題 6-2 長方形長方體類&#xff1a; 6-1 從抽象類shape類擴展出一個圓形類Circle 二&#xff1a;編程題 7-1&#xff1a;周長計算器 一&#xff1a;函數題 6-2 長方形長方體類&#xff1a; 定義一個長方形類Rectangle&#xff0c;擁有長、寬屬性…

定時發圈操作介紹

1、登陸已有的賬號&#xff0c;點擊到"朋友圈"功能 2、選擇要發圈的微信號&#xff0c;編輯發圈的文案內容 3、自定義想要的時間點 4、點擊"立即發送" 5、可進行跟圈

【JavaScript】eval

JavaScript 中的 eval() 是一個全局函數&#xff0c;它接受一個字符串參數&#xff0c;并將其作為 JavaScript 代碼進行解析和執行&#xff1b;如果接收的不是一個字符串&#xff0c;則會將傳入的數據直接返回。 eval 的基本用法&#xff1a; eval() 函數將傳入的字符串參數作為…

深度解析 Spring 源碼:解密AOP切點和通知的實現機制

文章目錄 深度解析 Spring 源碼&#xff1a;解密AOP切點和通知的實現機制一、Spring AOP的基礎知識1.1 AOP的核心概念&#xff1a;切點、通知、切面等1.2 Spring AOP與傳統AOP的區別和優勢 二、深入分析切點和通知的實現2.1 研究 Pointcut 接口及其實現類2.1.1 Pointcut 接口2.…

powershell 防止休眠或屏幕關閉并定時截屏保存

powershell 防止休眠或屏幕關閉 01 前言 因工作需要&#xff0c;需要在用戶的機器上進行操作&#xff0c;有些工作比較耗時、耗CPU&#xff0c;配置也不高&#xff0c;因而就不能用這臺機器同時干太多活&#xff0c;又不能干盯著啥也干不了&#xff0c;但是一段時間不操作&am…

鞏固學習9

show-me-the-code題目001 #做為 Apple Store App 獨立開發者&#xff0c;你要搞限時促銷&#xff0c;為你的應用生成激活碼&#xff08;或者優惠券&#xff09;&#xff0c;使用 Python 如何生成 200 個激活碼&#xff08;或者優惠券&#xff09;&#xff1f; import random a…

延遲隊列有哪些

延遲隊列 與時間相關場景的應用,經常用于延后多少時間執行什么任務。 java 自帶延遲隊列 class Solution {public static void main(String[] args) throws InterruptedException {DelayQueue<DelayMealTask> queue = new DelayQueue<>();DelayMealTask task =…

MySQL存儲過程練習

DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 學號,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) unsigned DEFAULT NULL,sex char(2) DEFAU…

數據庫審計系統Yearning使用筆記

一、啟動 1、初始化MySQL 啟動mysql docker run -d --namemysql -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot mysql:5.7創建數據庫&#xff0c;鏈接數據庫并執行以下創建庫的腳步&#xff0c;注意字符集 create database yearning char set utf8mb42、啟動Yeelabs 需要執行…

CDGA|揭秘移動物聯網數據治理秘訣,輕松提升數據質量,賦能智慧未來

在數字化浪潮洶涌的今天&#xff0c;移動物聯網作為連接物理世界與數字世界的橋梁&#xff0c;其數據治理的重要性日益凸顯。高質量的數據不僅是企業決策的基石&#xff0c;更是推動行業智能化、精細化發展的關鍵。本文將為您揭秘移動物聯網數據治理的技巧&#xff0c;助您輕松…

如何設計實用的ITSM自助服務臺

在現代IT服務管理&#xff08;ITSM&#xff09;領域中&#xff0c;自助服務臺已成為IT運維環境的核心組件。它作為企業內部信息中心與其他部門用戶之間的橋梁&#xff0c;一個以用戶為中心的平臺&#xff0c;更注重用戶的自主性和自助能力&#xff0c;使用戶能夠直接訪問所需的…

微軟宣布GPT-4o模型,可在 Azure OpenAI上使用

5月14日&#xff0c;微軟在官網宣布&#xff0c;OpenAI最新發布的多模態模型GPT-4o&#xff0c;可以在 Azure OpenAI 云服務中使用。 據悉&#xff0c;GPT-4o支持跨文本、視頻、音頻多模態推理&#xff0c;例如&#xff0c;通過GPT-4o打造一個AI助手&#xff0c;用于輔導孩子解…

halcon學習之形狀匹配

算子 create_shape_model&#xff08;&#xff09; 創建一個用于匹配的形狀模型 create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID) 參數 Template&#xff1a; NumLevels&#…