团队代码质量利器:ESLint 搭配 Prettier

一个中大型项目,一般由团队成员共同开发维护。但每个开发人员都有独特的代码编写风格和不同的文本编辑器。那么如何解决同一项目中有太多不同编码风格的问题?如何实现相同的编码风格,避免团队成员之间的许多警告呢?

答案就是:ESLint 搭配 Prettier!!!

ESLint

ESLint 是一个开源的 JavaScript 代码检查工具,能够发现潜在的错误、不良实践和性能问题,比如未使用的变量、潜在的类型错误或未处理的异常等。

Prettier

Prettier是一个流行的代码格式化工具,可以自动格式化代码,消除了手动调整缩进、空格、括号等格式问题的需要,使得开发者可以专注于业务逻辑而不是代码样式,提高开发效率。

ESLint 搭配 Prettier

ESLint  配置 Prettier 在项目中有以下优势和必要性:

  1. 代码一致性:Lint 和 Prettier 能确保团队成员遵循统一的编码风格和格式,无论团队成员有多少,都能保持代码风格的一致性。这大大提高了代码的可读性和维护性。

  2. 提高代码质量:ESLint 作为代码质量检查工具,能够发现潜在的错误、不良实践和性能问题,比如未使用的变量、潜在的类型错误或未处理的异常等,从而提升代码质量。

  3. 自动化格式化:Prettier 自动格式化代码,消除了手动调整缩进、空格、括号等格式问题的需要,使得开发者可以专注于业务逻辑而不是代码样式,提高开发效率。

  4. 减少代码审查工作量:由于 ESLint 和 Prettier 已经处理了很多格式和质量问题,代码审查过程可以更专注于逻辑和功能实现,而非表面的格式差异,加速代码审查流程。

  5. 易于集成:两者都广泛支持各种编辑器和构建工具,如 Visual Studio Code、WebStorm、Git Hook、Webpack、Vue CLI、Create React App 等,易于在现有开发环境中集成。

  6. 跨语言支持:虽然 ESLint 主要针对 JavaScript,但它也支持 TypeScript、HTML 和 JSX。而 Prettier 支持更多的编程语言,包括 CSS、SCSS、Less、Markdown 等,使得整个项目中的代码风格都能得到统一。

  7. 减少团队冲突:代码风格的不一致往往是团队成员之间产生分歧的原因之一。通过统一的 ESLint 和 Prettier 配置,可以显著降低因代码风格不同而产生的代码审查意见不合,促进团队合作。

  8. 持续集成/持续部署(CI/CD)友好:在 CI/CD 流程中集成 ESLint 和 Prettier,可以在代码合并前自动进行代码检查和格式化,保证主分支代码的高质量和一致性,减少因代码格式或质量问题导致的构建失败。

标准项目中的额外配置项

在项目的根目录下找到.eslintrc.js文件,打开,添加额外规则:

1.将vscode中的prettier插件禁掉,因为使用的是基于包安装的;

2.同时将设置里的 format on save 关闭;

3.为ESLint插件配置保存时自动修复

避免插件与格式化工具冲突!

{"editor.codeActionsOnSave": {"source.fixAll": "explicit"},// 关闭保存自动格式化"editor.formatOnSave": false,"editor.defaultFormatter": "esbenp.prettier-vscode"
}
/* eslint-env node */
require('@rushstack/eslint-patch/modern-module-resolution')module.exports = {root: true,extends: ['plugin:vue/vue3-essential','eslint:recommended','@vue/eslint-config-prettier/skip-formatting'],parserOptions: {ecmaVersion: 'latest'},
/*额外规则  */rules: {
/*使用的是包安装的prettier,可以将vscode中的插件禁掉*/'prettier/prettier': [ 'warn',{singleQuote: true, // 单引号semi: false, // 无分号printWidth: 80, // 每行宽度至多80字符trailingComma: 'none', // 不加对象|数组最后逗号endOfLine: 'auto' // 换行符号不限制(win mac 不一致)}],// ESLint关注于格式规范'vue/multi-word-component-names': ['warn',{ignores: ['index'] // vue组件名称多单词组成(忽略index.vue)}],'vue/no-setup-props-destructure': ['off'], // 关闭 props 解构的校验// 💡 添加未定义变量错误提示,create-vue@3.6.3 关闭,这里加上是为了支持下一个章节演示。'no-undef': 'error'}
}

基于husky的代码检查

Husky 是一个用于在 Git 提交过程中自动化代码检查和其他操作的工具,它通过 Git Hooks 实现。在 Vue 项目或任何前端项目中,Husky 可以与 ESLint、Prettier 等代码质量工具结合,确保在代码提交前符合一定的规范和质量要求。

首先要创建一个仓库,不明白的友友可以看下这篇博客:使用Git命令从本地上传到码云-CSDN博客

安装 Husky

首先,确保你的项目中已安装了 Husky。如果还没有安装,可以通过 npm 或 pnpm安装:

npm install husky --save-dev
pnpm dlx husky-init && pnpm install

配置 Husky

安装完成后,你可以在项目的根目录下创建或修改 package.json 文件,来设置 Husky 的钩子。最常用的钩子是 pre-commitpre-push,分别在提交前和推送到远程仓库前触发。

例如:代码提交前做检验

修改 .husky/pre-commit文件

#npm test
pnpm lint

问题:

pnpm lint是全量检查,耗时问题、历史问题;

1.在历史代码仓库上工作的时候,一执行检测,检测报告里会出现很多报错;

2.随着代码库越来越庞大,全量检测整个项目,时间成本会越来越高;

So,一个新的方法来了!

暂存区ESLint校验

在Git工作流中,对暂存区(staging area)进行ESLint校验具有多方面的优势。

  1. 仅对暂存区的文件进行校验意味着只处理那些即将被提交的代码变更,这相比检查整个项目来说大大减少了校验的时间开销,尤其是在大型项目中效果显著;
  2. 因为问题在提交前就被发现并修正,避免了因小错误反复提交和修正的历史记录,使得提交历史更加清晰,便于后期追踪和回溯问题。

安装一个包:

pnpm i lint-staged -D

配置 package.json文件

{// ... 省略 ..."lint-staged": {"*.{js,ts,vue}": ["eslint --fix"]}}"scripts": {// ... 省略 ..."lint-staged": "lint-staged"}}
}

修改 .husky/pre-commit 文件

pnpm lint-staged

OK!

配置完毕,开工!

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

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

相关文章

Web Accessibility基础:构建无障碍的前端应用

Web Accessibility(网络无障碍)是确保所有人都能平等访问和使用网站和应用程序的关键。这包括视觉、听觉、运动和认知能力有限的用户。以下是一些构建无障碍前端应用的基础原则和代码示例: 2500G计算机入门到高级架构师开发资料超级大礼包免…

list stream 改变list属性的值

在Java中,如果你想使用Stream API来改变List中对象的某个属性值,需要注意的是,Stream API本身设计为不可变操作,即它不直接修改原有的集合,而是产生一个新的流或集合。但是,你可以通过流操作来创建一个新的…

java文档管理系统的设计与实现源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的文档管理系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 文档管理系统的…

第二证券今日投资参考:5月国产游戏版号发放 猪价加速上涨

昨日,两市股指盘中震荡上扬,沪指盘中续创年内新高,创业板指一度涨超1%。到收盘,沪指涨0.54%报3171.15点,深证成指涨0.43%报9750.82点,创业板指涨0.59%报1875.93点,上证50指数涨0.34%&#xff1b…

小程序-收货地址管理模块实现

页面结构代码&#xff1a; address-form.vue --->新建地址和修改地址页面 <template><view class"content"><form><!-- 表单内容 --><view class"form-item"><text class"label">收货人</text>…

注册/认证小程序为什么验证失败

​很多商家在注册/认证小程序时&#xff0c;经常会出现各种验证失败的情况。其中可能是工商总局数据没更新&#xff0c;也有可能是商家填写的信息有误。下面具体分析一下这些情况。 一、工商数据没有更新或存在异常。 微信平台是直接拉取国家工商总局的数据&#xff0c;工商数…

Python 中文编码问题

Python 输出 "Hello, World!"&#xff0c;英文没有问题&#xff0c;但是如果你输出中文字符 "你好&#xff0c;中国" 就有可能会碰到中文编码问题。 Python 文件中如果未指定编码&#xff0c;在执行过程会出现报错&#xff1a; print ("你好&#x…

登录安全分析报告:创蓝云智注册

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

vue 组件中 data 为什么必须是函数

在 Vue 中&#xff0c;组件的 data 必须是一个函数而不是一个对象&#xff0c;这是因为 Vue 组件是可复用的&#xff0c;并且每个组件实例都需要拥有自己独立的数据状态。如果 data 是一个对象&#xff0c;那么这个对象在多个组件实例之间将是共享的&#xff0c;这会导致所有的…

# 分布式链路追踪_skywalking_学习(1)

分布式链路追踪_skywalking_学习&#xff08;1&#xff09; 一、APM 系统概述 1、什么是 APM 系统&#xff1f; APM &#xff1a;全称 Application Performance Management 即应用性能管理系统。是对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案。…

移动端常用meta

在移动端开发中&#xff0c;<meta> 标签用于提供关于HTML文档的元数据&#xff0c;这些元数据不会显示在页面上&#xff0c;但可以被浏览器解析&#xff0c;用于控制页面的行为和外观。以下是一些在移动端开发中常用的 标签&#xff1a; 1. 视口设置 这是移动端开发中最…

安卓手机APP开发__Wi-Fi扫描概述

安卓手机APP开发__Wi-Fi扫描概述 目录 概述 Wi-Fi的扫描过程 限制 权限 Android 8.0 and Android 8.1: Android 9: Android 10 (API 级别 29) 和 更高版本: 扫描频率的限制 Android 8.0 and Android 8.1: Android 9: Android 10 and higher: 概述 你能使用Wi-Fi的…

Flutter 中的 ValueListenableBuilder 小部件:全面指南

Flutter 中的 ValueListenableBuilder 小部件&#xff1a;全面指南 在 Flutter 应用开发中&#xff0c;响应数据变化并更新 UI 是一个常见的需求。ValueListenableBuilder 是 Flutter 提供的一个非常有用的小部件&#xff0c;它允许你根据 ValueListenable 的值自动更新 widge…

JS对象超细

目录 一、对象是什么 1.对象声明语法 2.对象有属性和方法组成 二、对象的使用 1.对象的使用 &#xff08;1&#xff09;查 &#xff08;2&#xff09;改 &#xff08;3&#xff09;增 &#xff08;4&#xff09;删&#xff08;了解&#xff09; &#xff08;5&#xf…

算网融合,移动云加速形成新质生产力

文章目录 一.移动云介绍1.政策支持2.产品介绍image-20240522164613917 二.云主机ESC使用1.实名认证2.云主机订购3.登录方式4.控制台登录5.Xshell登录6.简单使用 三.产品使用评价1.真伪测评2.产品优势 一.移动云介绍 1.政策支持 ​ 正所谓家事国事天下事&#xff0c;事事关心&…

访问列表元素

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;如果想将列表的内容输出也比较简单&#xff0c;可以直接使用print()函数即可。例如&#xff0c;创建一个名称为untitle的列表…

将PCD点云投影到BEV平面得到图片

前言 点云数据作为一种丰富的三维空间信息表达方式&#xff0c;通常用于自动驾驶、机器人导航和三维建模等领域。然而&#xff0c;点云数据的直观性不如二维图像&#xff0c;这限制了它在一些需要快速视觉反馈的应用场景中的使用。本文将探讨如何将点云数据转换为二维图像&…

医药进出口交易|基于SSM+vue的医药进出口交易系统的设计与实现(源码+数据库+文档)

医药进出口交易系统 目录 基于SSM&#xff0b;vue的医药进出口交易系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 5.1系统登录 5.2管理员功能模块 5.3仓储部门功能模块 5.4业务部门功能模块 5.5供应部门功能模块 5.6财务部功能模块 5.7客户功能模块 …

Linux:IPC - 管道

Linux&#xff1a;IPC - 管道 管道原理匿名管道管道读写机制管道特性命名管道mkfifo指令mkfifo接口 进程间通信的目的&#xff0c;是为了让两个进程看到同一份资源&#xff0c;在Linux中&#xff0c;主要的进程间通信有管道&#xff0c;system V&#xff0c;POSIX&#xff0c;本…

adb卸载系统垃圾应用

//获取包名 输入如下代码&#xff0c;然后在打开和关闭要获取包名的app就会打印出该app的包名 adb shell am monitor //卸载系统应用 -k会保留用户数据&#xff0c;不包含-k则不会保留用户数据 adb shell pm uninstall -k --user 0 包名 &#xff08;包名一般为&#xff1a;c…