前端提交规范 ESLint + Prettier + husky + lint-staged

2023-09-21 17:51:48

如何统一代码风格,规范提交呢? 推荐使用前端规范全家桶 ESLint + Prettier + husky + lint-staged。

  • eslint (github.com/eslint/esli…)
  • JavaScript 代码检测工具,检测并提示错误或警告信息
  • prettier (github.com/prettier/pr…)
    代码自动化格式化工具,更好的代码风格效果
  • husky (github.com/typicode/hu…)
  • Git hooks 工具, 可以在执行 git 命令时,执行自定义的脚本程序
  • lint-staged (github.com/okonet/lint…)
    对暂存区 (git add) 文件执行脚本 检测 校验
  • Commitizen(github.com/commitizen-…)
    检测 git commit 内容是否符合定义的规范
  • eslint-config-prettier (github.com/prettier/es…)
    解决 eslint 和 prettier 冲突

下面我会逐个讲解每个依赖包使用步骤,文末总结了使用过程中的问题,让大家少踩坑。

ESlint

安装步骤:

1、安装eslint

npm install eslint

2、快速构建 eslint 配置文件

npm init @eslint/config

执行完成后,自动生成 eslint 配置文件.eslintrc.js 可在 .eslintrc.js 中配置 rules 定义校验规则

    rules: {
    	indent: ['error', 4], // 用于指定代码缩进的方式,这里配置为使用四个空格进行缩进。
      	'linebreak-style': [0, 'error', 'windows'], // 用于指定换行符的风格,这里配置为使用 Windows 风格的换行符(\r\n)。
        quotes: ['error', 'single'], // 用于指定字符串的引号风格,这里配置为使用单引号作为字符串的引号。
        semi: ['error', 'always'], //用于指定是否需要在语句末尾添加分号,这里配置为必须始终添加分号。
        '@typescript-eslint/no-explicit-any': ['off'] // 用于配置 TypeScript 中的 "any" 类型的使用规则,这里配置为关闭禁止显式使用 "any" 类型的检查。
    }

husky

husky 是一个 Git 钩子(Git hooks)工具,它可以让你在 Git 事件发生时执行脚本,进行代码格式化、测试等操作。
常见的钩子

  • pre-commit:在执行 Git commit 命令之前触发,用于在提交代码前进行代码检查、格式化、测试等操作。
  • commit-msg:在提交消息(commit message)被创建后,但提交操作尚未完成之前触发,用于校验提交消息的格式和内容。
  • pre-push:在执行 Git push 命令之前触发,用于在推送代码前进行额外检查、测试等操作。

具体的使用步骤如下:

  1. 在项目根目录下运行以下命令安装 husky:
npm install husky --save-dev
  1. 启用git 钩子 输入以下命令
npm pkg set scripts.prepare="husky install"

安装成功后会在 package.json 文件中 script 中生成命令

注意!如为自动生成需手动添加,将以下内容粘贴到 package.json 文件中

// package.json
{
  "scripts": {
    "prepare": "husky install"
  }
}
  1. 创建.husky目录,执行如下代码
npm run prepare 

注意!如未生成 .husky 目录,推荐使用命令 npx husky install

创建 Git 挂钩

新建提交前校验代码格式化

npx husky add .husky/pre-commit "npx --no-install lint-staged"

npx --no-install lint-staged 是一个命令,用于在不安装 lint-staged 的情况下运行该工具。npx --no-install 命令用于从远程下载并执行指定的命令。

执执行成功,.husky 目录多出一个 pre-commit 文件

新建提交前校验提示规范

npx husky add .husky/commit-msg

npx --no-install lint-staged 是一个命令,用于在不安装 lint-staged 的情况下运行该工具。npx --no-install 命令用于从远程下载并执行指定的命令。

lint-staged

  • 作用:lint-staged 可以让你在 Git 暂存(staged)区域中的文件上运行脚本,通常用于在提交前对代码进行格式化、静态检查等操作。
  • 使用方式:你可以在项目中使用 lint-staged 配合 husky 钩子来执行针对暂存文件的脚本。具体的使用步骤如下:

在项目根目录下运行以下命令安装 lint-staged:

npm install lint-staged --save-dev

在 package.json 文件中添加以下配置:

{
  "lint-staged": {
    // src/**/*.{js,jsx,ts,tsx} 校验暂存区、指定目录下的文件类型
    // 校验命令,执行 eslint 、prettier 
    "src/**/*.{js,jsx,ts,tsx}": [
      "prettier --write",
      "eslint --fix"
    ]
  }
}

“src/**/*.{js,jsx,ts,tsx}” 是指定要针对的暂存文件模式,你可以根据自己的项目需求来配置。
[“prettier --write”,“eslint --fix”]为校验命令,可执行 eslint 、prettier 等规则

prettier

prettier 是一个代码格式化工具。prettier 与上述 husky 和 lint-staged 搭配使用,可以在提交代码之前自动格式化代码。具体的使用步骤如下:

在项目根目录下运行以下命令安装 prettier:

npm install prettier --save-dev

建 .prettierrc.js 文件,并定义你想要的代码样式,例如:

module.exports = {
    semi: true,//强制在语句末尾使用分号。
    trailingComma: 'none',//不允许在多行结构的最后一个元素或属性后添加逗号。
    singleQuote: true,//使用单引号而不是双引号来定义字符串。
    printWidth: 120,//指定每行代码的最大字符宽度,超过这个宽度的代码将被换行
    tabWidth: 4//指定一个制表符(Tab)等于多少个空格。
};

这里的配置选项根据你的需求定义,具体选项可以参考 prettier 文档。 在 lint-staged 的配置中添加 “prettier --write”,例如:

{
  "lint-staged": {
    // src/**/*.{js,jsx,ts,tsx} 校验暂存区、指定目录下的文件类型
    // 校验命令,执行 eslint 、prettier 
    "src/**/*.{js,jsx,ts,tsx}": [
      "prettier --write",
      "eslint --fix"
    ]
  }
}

这样当你进行 GIT 提交操作时,lint-staged 将自动运行 prettier 来格式化符合规则的文件。

配置 ctrl + s ,自动保存功能

第一种,在vscode 设置里面配置 点击Vscode的设置=>工作区=>文本编辑器

在这里插入图片描述

更多推荐

unity gb28181 rtsp 视频孪生图像拉流和矫正插件(一)

目的是为了视频孪生,将视频放到三维里面,如果使用自己写的插件,有更好的灵活性,同时断线重连等等都更好控制了。1、矫正算法和硬件解码最好使用opencv制作,可以使用opencv的cuda加速,opencv的编译,必须用cudacudnn,都装好,再编译。硬件解码写在插件里面。dll插件使用extern“C”方式。使用_

【Linux】使用 UEFI 的操作系统启动过程

参考书籍《BeyondBIOS:DevelopingwiththeUnifiedExtensibleFirmwareInterfaceThirdEdition》文章目录一、从UEFI到OSRunTime1.1BIOS和UEFI1.2UEFI启动过程1.21Security(SEC)Phase1.22Pre-EFIIni

浅谈安科瑞智慧消防在城市综合体应急安全中的应用

摘要:城市综合体作为当前城市化进程中主要的系统组成部分,具有空间大、容纳的人员多、火灾隐患多等特点,为了延长城市综合体运行寿命,加强智慧消防建设,切实需要做好城市综合体运行安全性的防护,从而为城市社会经济发展发挥重要的促使作用。关键字:智慧消防;城市综合体;应急安全一、概述随着社会经济与科学技术的发展,智慧城市成为发展

【C++STL基础入门】list的运算符重载和关于list的算法

文章目录前言一、list运算符1.1逻辑运算符1.2赋值运算符二、list相关算法2.1查找函数总结前言C++标准模板库(STL)是一组强大而灵活的工具,用于处理数据结构和算法。其中,std::list是STL中的一个重要容器,它实现了双向链表的数据结构,具有高效的插入和删除操作。本文将介绍list容器的运算符重载和相

设计模式之中介者模式

尽管将一个系统分割成许多对象通常可以增加其可复用性,但是对象间相互连接的激增又会降低其可复用性大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改动就十分困难了中介者模式,用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使

【Vue】Vue的监听属性与计算属性

在Vue中,有两种类型的属性是用于响应式的,即监听属性和计算属性。监听属性:监听属性是声明在Vue实例的data选项中的属性,它们用于存储应用程序中的状态或数据。当监听属性的值发生变化时,Vue会自动响应地更新绑定到该属性的视图。例如:data:{message:'HelloVue!'}当message的值改变时,绑定

树结构数据在table中回显 treeselect disabled

<el-table-columnlabel="产业认定"align="center"prop="industryIdentification"><templateslot-scope="scope"><treeselectv-if="scope.row.industryIdentification"v-model="s

(Clock Domain Crossing)跨时钟域信号的处理 (自我总结)

CummingsSNUG2008Boston_CDC.pdf参考:跨时钟域处理方法总结–最终详尽版-love小酒窝-博客园跨时钟域(CDC)设计方法之单bit信号篇(一)|电子创新网赛灵思社区孤独的单刀_Verilog语法,FPGA设计与调试,FPGA接口与协议-CSDN博客跨时钟域传输总结(包含verilog代码|T

低代码开源项目整理

低代码是基于可视化和模型驱动理念,结合云原生与多端体验技术,它能够在多数业务场景下实现大幅度的提效降本,为专业开发者提供了一种全新的高生产力开发范式。下面就来分享几个值得学习和使用的前端低代码开源项目,更深入地了解什么是低代码。1AppsmithAppsmith是一款开源低代码框架,主要用于构建管理面板、内部工具和仪表

基于SSM+Vue的亿互游在线平台的设计与开发

末尾获取源码开发语言:JavaJava开发工具:JDK1.8后端框架:SSM前端:采用Vue技术开发数据库:MySQL5.7和Navicat管理工具结合服务器:Tomcat8.5开发软件:IDEA/Eclipse是否Maven项目:是目录一、项目简介二、系统功能三、系统项目截图用户功能模块的实现管理员功能模块的实现前台

王道考研计算机组成原理

王道考研计算机组成原理计算机系统概述计算机系统层次结构计算机的性能指标错题数据的表示和运算数制与编码运算方法和运算电路浮点数的表示与运算存储系统存储器概述主存储器主存储器与CPU的连接外部存储器高速缓冲存储器虚拟存储器指令系统指令格式指令的寻址方式程序的机器级代码表示CISC和RISC的基本概念中央处理器CPU的功能和

热文推荐