在项目中加入 husky + lint-staged + eslint,代码检测格式化

背景

        由于日常工作的多人协作中,会因为个人代码编写风格导致代码在不同人电脑上,会有异常代码格式的提示,为了解决这个小问题,我们可以使用 husky + lint-staged 来对代码进行一定程度上的格式化,使格式风格统一,方便查看

步骤

        先安装相关插件  pnpm add husky lint-staged --save-dev

        根据 husky 的文档,输入 npx husky init ,然后会在目录下生成 .husky 文件夹,打开 pre-commit 文件,可以在内输入 npx lint-staged。再 package.json 会生成一个脚本 然后,我们先运行一下 pnpm prepare (hucky文档)

        说到这个 lint-staged,我们可以在 package.json 创建一个字段,内容如下

// package.json
{..."lint-staged": {"*.js": "eslint --fix", // 比如我们要对提交前的所有 js 文件进行语法检查以及修复}
}

        日常工作中 eslint 是js必备的代码语法检测、修复工具。查阅文档,eslint --fix 可以对结果进行修复

        安装插件 pnpm add eslint --save-dev,根据 eslint 文档在项目根目录下创建 eslint.config.js,

然后,再安装 @eslint/js 预定义配置,同样 pnpm add eslint --save-dev,示例配置文件如下:

import js from '@eslint/js'export default [js.configs.recommended,{rules: {'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', // 当生产环境时,不允许console'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', // 当生产环境时,不允许debugger}}
];

 此时在项目中,创建 src 文件夹,再创建测试文件 index.js,内容如下:

function test(){let a= 1;let b=2;;;const c = 3console.log(a+b);const df= 1return a*b
}test ();

 将此项目和gitlab的仓库关联好之后,提交代码就会自动检测,在终端输入 git add . && git commit -m "test msg",可以看到,终端有提示检查不通过:

报错的内容,第一条和第三条,是 c 和 df 定义了但未使用,第二个是提示console未定义,这个报错就需要在 eslint.config.js 里面定义一下全局对象,修改为如下:

import js from '@eslint/js'export default [js.configs.recommended,{languageOptions: {globals: {console: 'readonly'}},rules: {'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', // 当生产环境时,不允许console'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', // 当生产环境时,不允许debugger// 'no-multi-spaces': ['error', { ignoreEOLComments: true }], // 不允许多个空格}}
];

再次执行提交操作,就只剩下这两条报错:

        在目前,我们能实现的就是对代码语法检测,但未做到对代码的格式化。所以我们用到 prettier,来做代码格式化。但是我们这里可以不使用 prettier 这个依赖包,而是可以安装 eslint 的插件 eslint-plugin-prettier,根据文档,安装 eslint-plugin-prettier eslint-config-prettier 

pnpm add eslint-plugin-prettier eslint-config-prettier --save-dev

        修改eslint.config.js:

import js from '@eslint/js'
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'export default [js.configs.recommended,eslintPluginPrettierRecommended,{    languageOptions: {globals: {console: 'readonly'}},rules: {'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', // 当生产环境时,不允许console'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' // 当生产环境时,不允许debugger}}
]

 再次保存,然后将之前的代码检查报错行,直接注释,走 git 提交,

可以看到提示正常:

然后代码也被格式化并保存下来了,到此代码检测和格式化就完成了。

结束语

        目前用到的依赖都是当前时间(2024/6)下最新版本,如果老版本的则需要翻阅旧版本文档。希望对大家有帮助,如果有疑问可以评论交流学习一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jenkins 使用教程

1. 安装最新长期稳定版 2.426.1 Redhat Jenkins Packages sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key yum insta…

ubuntu20.04支持win10远程桌面连接

1. 安装xrdp sudo apt install xrdp 2. 检查xrdp状态 sudo systemctl status xrdp 要处于running状态 3.(若为Ubuntu 20)添加xrdp至ssl-cert sudo adduser xrdp ssl-cert 4. 重启服务 sudo systemctl restart xrdp 5. window 远程桌面连接&am…

大模型实战—大模型赋能网络爬虫

大模型赋能网络爬虫 简单来说,网页抓取就是从网站抓取数据和内容,然后将这些数据保存为XML、Excel或SQL格式。除了用于生成潜在客户、监控竞争对手和市场研究外,网页抓取工具还可以用于自动化你的数据收集过程。 借助AI网页抓取工具,可以解决手动或纯基于代码的抓取工具的…

Springcloud之gateway的使用详解

官网地址&#xff1a;https://docs.spring.io/spring-cloud-gateway/docs/4.0.4/reference/html/ 1.网关入门 helloword 网关不依赖start-web 导入的pom&#xff1a; <!--gateway--> <dependency><groupIdorg.springframework.cloud</groupId><arti…

openEuler 知:版本比较

文章目录 前言工具oe_diffoepkg 前言 本文的“版本比较”主要是指比较 openEuler 操作系统两个版本之间的 rpm 包的版本差异&#xff0c;只比较版本差异&#xff0c;不比较文件内容的差异。 比较版本主要用于分析两个操作系统版本之间软件包的版本变化。 工具 oe_diff 工具…

CUDA编程00 - 配置CUDA开发环境

第一步&#xff1a; 在一台装有Nvidia显卡和驱动的机器上&#xff0c;用nvidia-smi命令查看显卡所支持cuda版本 第二步&#xff1a; 到Nvidia官网下载CUDA Toolkit并安装&#xff0c;CUDA Toolkit Archive | NVIDIA Developer 安装时按提示下一步即可&#xff0c;安装完成用 …

【端智能】端智能技术演进与实践

什么是端智能技术 端智能&#xff08;On-Device Machine Learning&#xff09;是指把机器/深度学习算法模型应用和部署到端设备上&#xff0c;这里“端设备”是相对于云服务而言的&#xff0c;可以是手机&#xff0c;也可以是物联网IoT设备。 Google对端智能的介绍&#xff1…

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.2 业务处理系统-解读

教材中,一会儿“业务处理系统”,一会儿“事务处理系统”,语法毛病一堆。真是清华的水平!!! 系统架构设计师教程 第3章 信息系统基础知识-3.2 业务处理系统 3.2.1 业务处理系统的概念3.2.2 业务处理系统的功能3.2.2.1 数据输入3.2.2.2 数据处理3.2.2.2.1 批处理 (Batch …

计算机体系结构||指令的调度和延迟分布(3)

实验3 指令的调度和延迟分布 3.1实验目的 &#xff08;1&#xff09;加深对指令调度技术的理解。 &#xff08;2&#xff09;加深对延迟分支技术的理解。 &#xff08;3&#xff09;熟练掌握用指令调度技术来解决流水线中的数据冲突的方法。 &#xff08;4&#xff09;进一…

使用AI给编程赋能

传送门&#xff1a;https://www.bilibili.com/video/BV1pf421B71v?p23&vd_source092ecb16e8482a7243d0f8f7718c31a2 1. AIGC AI&#xff08;Artificial Intelligence&#xff09;&#xff1a;人工智能&#xff0c;是计算机科学体系下的一个学科&#xff0c;是指通过计算机…

c# 开发AutoCAD扩展

在C#中开发AutoCAD扩展涉及使用AutoCAD的.NET API&#xff0c; 利用AutoCAD的功能并创建自定义命令、对话框、块、图层和其他图形元素。以下是一些关键步骤和概念&#xff0c;可以帮助你开始使用C#开发AutoCAD扩展&#xff1a; 准备开发环境 安装AutoCAD&#xff1a;确保你有一…

【Linux】线程互斥和同步

目录 线程互斥 相关概念 互斥量mutex 互斥量的接口 初始化互斥量 销毁互斥量 互斥量加锁/解锁 可重入VS线程安全 概念 可重入与线程安全的联系 可重入与线程安全的区别 死锁 死锁的四个必要条件 避免死锁 避免死锁的算法 线程同步 条件变量 条件变量函数 初始…

语义分割——为什么单通道8bit灰度图像能显示多种色块???

目录 一、问题二、解答2.1 标签图的实际存储格式2.2 标签图的显示颜色2.3 颜色映射示例 三、应用颜色映射3.1 OpenCV显示标签图3.2 Matplotlib显示标签图 四、总结 一、问题 大家在做语义分割时不知道有没有这样的疑惑&#xff0c;使用打标签工具后&#xff0c;标签图是单通道…

项目收获总结--大数据量存储架构设计方案

项目收获总结--大数据量存储架构设计方案 一、背景二、数据存储层技术选型2.1 MySQL2.2 MongoDB2.3 HBase2.4 HBaseElasticSearch 三、HBaseElasticSearch基本原理3.1 前置考虑3.2 HBaseElasticSearch优点3.3 HBaseElasticSearch缺点 四、HBaseElasticSearch数据一致性架构4.1 …

大语言模型-Transformer-Attention Is All You Need

一、背景信息&#xff1a; Transformer是一种由谷歌在2017年提出的深度学习模型。 主要用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;特别是序列到序列&#xff08;Sequence-to-Sequence&#xff09;的学习问题&#xff0c;如机器翻译、文本生成等。Transfor…

【UE5】可反射的射线检测

目录 效果 步骤 一、准备射线 二、生成第一次反射后的射线 三、多次反射 四、通过循环进行多次反射 效果 步骤 一、准备射线 1. 新建一个工程&#xff0c;添加一个俯视角游戏资源包 2. 双击打开俯视角游戏地图 删除大纲中的后期处理体积使得地图可以正常显示 3. 添加一…

SAP批量报工源码

SAP批量报工源码,适用于工序少的情景。 *&---------------------------------------------------------------------* *& Report ZPPR106 *& *&---------------------------------------------------------------------* *& *& *&--------------…

网络编程中的TCP和UDP

什么是TCP协议 TCP( Transmission control protocol )即传输控制协议&#xff0c;是一种面向连接、可靠的数据传输协议&#xff0c;它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接 &#xff1a;数据传输之前客户端和服务器端必须建立连…

Aouth2单点登录

信息来源B站 不改bug早点睡&#xff0c;北冥 时序图 -----------------------------总结描述 总体流程 浏览器 - 系统1 - 系统2 - 认证中心(SSO) 访问系统1 浏览器&#xff0c;访问系统1&#xff0c;询问认证中心是否登录 未登录&#xff0c;重定向一个登录页面返回给浏…

(二)原生js案例之数码时钟计时

原生js实现的数字时间上下切换显示时间的效果&#xff0c;有参考相关设计&#xff0c;思路比较难&#xff0c;代码其实很简单 效果 代码实现 必要的样式 <style>* {padding: 0;margin: 0;}.content{/* text-align: center; */display: flex;align-items: center;justif…