前端工程化工具系列(一)—— ESLint(v9.3.0):代码质量守护者 基础篇

本文主要是介绍前端工程化工具系列(一)—— ESLint(v9.3.0):代码质量守护者 基础篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ESLint 作为前端工程化中的重要工具,主要用于检查和修复 JavaScript/TypeScript 代码中的错误。目的是为了统一代码风格,并确保代码的一致性和可维护性。

1. 环境要求

v9 以上的 ESLint,支持 Node.js 的版本 v18.18.0+,v20.9.0+ 以及 v21.1.0+ 版本的 Node.js,不支持v19及之前的版本。
在命令行中输入以下内容来查看当前系统中 node 的版本。

node -v

Node.js 推荐使用 v18.20.3 或者 v20.13.1。

这里使用的包管理器是 PNPM,版本为 v9.1.4。

2. 安装

这里以使用 ESLint + Airbnb 风格为例。

2.1 安装 ESLint

在对应的项目下打开命令行,执行:

pnpm install -D eslint @eslint/js

如果是 NPM 或者 Yarn,由于好多命令是通用的,因此上方的命令行中直接替换成对应的包管理名即可,例:npm install -D eslint @eslint/js

2.2 针对 JavaScript

安装对应的 Airbnb 配置。

pnpm install -D eslint-config-airbnb-base eslint-plugin-import

2.3 针对 TypeScript

pnpm install -D eslint-config-airbnb-base eslint-plugin-import eslint-config-airbnb-typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser

可以看出是在 JavaScript 的基础上多了规则、插件和解析器。

2.4 兼容之前的配置

从 ESLint v9.0.0 开始,默认采用新的扁平化配置系统。绝大部份扩展和插件都没有做适配,因此需要通过以下包来兼容旧的配置。

pnpm install -D @eslint/compat @eslint/eslintrc

3 配置

在项目的根目录下创建 ESLint 的配置文件:eslint.config.js。

3.1 针对 JavaScript

在 eslint.config.js 中加入以下配置:

/* eslint-disable no-underscore-dangle */
/* eslint-disable import/no-extraneous-dependencies */
// eslint-disable-next-line import/no-unresolved
import { fixupConfigRules } from '@eslint/compat';
import { FlatCompat } from '@eslint/eslintrc';
import js from '@eslint/js';
import path from 'path';
import { fileURLToPath } from 'url';// mimic CommonJS variables -- not needed if using CommonJS
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);const flatCompat = new FlatCompat({baseDirectory: __dirname, // optional; default: process.cwd()resolvePluginsRelativeTo: __dirname, // optionalrecommendedConfig: js.configs.recommended, // optional unless you're using "eslint:recommended"
});export default [...fixupConfigRules(// 因为v9变化较大,为了兼容之前的config,提供了方法转换整个旧的config。flatCompat.config({extends: ['airbnb-base'],rules: {'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off','no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off','max-len': ['error', 200],},}),),{languageOptions: {ecmaVersion: 'latest',sourceType: 'module',},},
];

3.2 针对 TypeScript

/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/naming-convention */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable no-underscore-dangle */
/* eslint-disable import/no-extraneous-dependencies */
// eslint-disable-next-line import/no-unresolved
import { fixupConfigRules } from '@eslint/compat';
import { FlatCompat } from '@eslint/eslintrc';
import js from '@eslint/js';
import path from 'path';
import { fileURLToPath } from 'url';// mimic CommonJS variables -- not needed if using CommonJS
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);const flatCompat = new FlatCompat({baseDirectory: __dirname, // optional; default: process.cwd()resolvePluginsRelativeTo: __dirname, // optionalrecommendedConfig: js.configs.recommended, // optional unless you're using "eslint:recommended"
});export default [...fixupConfigRules(// 转换整个configflatCompat.config({extends: ['airbnb-base','airbnb-typescript/base','plugin:@typescript-eslint/eslint-recommended','plugin:@typescript-eslint/recommended','plugin:@typescript-eslint/recommended-requiring-type-checking',],parserOptions: {project: './tsconfig.json',},rules: {'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off','no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off','max-len': ['error', 200],},}),),
];

问题解决

问题1:

Error: Could not find config file.

解决:
ESLint9 的配置文件名必须为 eslint.config.js,之前的 eslintrc.(可为 空,js, yaml, yml, json)都被废弃了。

问题2:

SyntaxError: Cannot use import statement outside a module

解决:
两种方式:

  1. 在 package.json 中添加 “type”: “module”,形如:
{"type": "module","devDependencies": {"@eslint/js": "^9.3.0","eslint": "^9.3.0","eslint-config-airbnb-base": "^15.0.0","eslint-plugin-import": "^2.29.1"}
}
  1. 将配置内容修改为 CommonJS 格式:
// eslint.config.js
module.exports = [{rules: {semi: "error","prefer-const": "error"}}
];

问题3:

.eslintignore 中定义的忽略文件不起作用。
解决:
ESLint9 中需要在 eslint.config.js 中进行配置,如:

 {ignores: ['/dist','.idea','.husky','.vscode','pnpm-debug.log*','**/tests/*','node_modules','/ios','/android',],},

这篇关于前端工程化工具系列(一)—— ESLint(v9.3.0):代码质量守护者 基础篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020037

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

redis-cli命令行工具的使用小结

《redis-cli命令行工具的使用小结》redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的... 目录基本连接参数基本连接方式连接远程服务器带密码连接操作与格式参数-r参数重复执行命令-i参数指定命

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P