「折腾」ESLint 安装与使用
条评论本文标题:《「折腾」ESLint 安装与使用》。
写在前边
因为嫌麻烦,并没有实际用到过 ESLint;
最近改了一个别人写的东西,别的不说,单行注释双斜线后不加空格实在是逼死强迫症。
写在前边
因为嫌麻烦,并没有实际用到过 ESLint;
最近改了一个别人写的东西,别的不说,单行注释双斜线后不加空格实在是逼死强迫症。
资源网址
ESLint - Visual Studio Marketplace:
https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint
Find and fix problems in your JavaScript code - ESLint - Pluggable JavaScript Linter:
虽然不太清楚,使用 VSCode 插件版仍然需要在项目下或全局安装eslint
的样子?
安装 ESLint
1 | # 安装 pnpm 并设置淘宝镜像 |
全局安装:
1 | # 全局安装 |
当前项目内:
1 | # 当前项目内 |
初始化
1 | pnpm create @eslint/config |
使用(CLI)
1 | # 检查指定文件 |
新版命令行废弃了很多参数,甚至官方文档也还没完全更新……
Command Line Interface Reference - ESLint - Pluggable JavaScript Linter:
https://eslint.org/docs/latest/use/command-line-interface#site_top
VSCode 插件版
注:插件版本好像依赖于全局安装的eslint
包?
在「命令面板(Ctrl + Shift + P)」中输入eslint
即可查看所拥有的命令:
ESLint: Create ESLint configuration
创建配置文件;ESLint: Fix all auto-fixable Problems
修复能够自动修复的问题;ESLint: Migrate Settings
迁移设置,啥用暂不清楚;ESLint: Show Output Channel
查看日志输出,从信息看确实依赖于node_modules\eslint\lib\api.js
;ESLint: Restart ESLint Server
重启插件服务;
因为 VSCode 默认终端是 Git Bash,所以自动触发创建命令时出现了下边错误:
1 | node_modules\.bin\eslint.cmd --init |
所以保险起见还是自己执行pnpm create @eslint/config
吧;
插件有不少配置项,可以在「设置」中搜索eslint
查看:
1 | { |
检查规则
使用 @eslint/config
初始化,然后再修改具体细节,下边为一份参考:
1 | // 此处为新版的 eslint.config.mjs |
List of available rules - ESLint 中文:
错误排查
1、
Environment key “es2021” is unknown
项目中已经安装 ESLint 但是版本太低,请删除「package-lock.json」文件后重新执行cnpm install eslint --save-dev
或cnpm install eslint@latest --save-dev
;
仍然有问题请删除 node_modules 后再试;
可在「本站(www.wdssmq.com
)」搜索关键词:快速删除 node_modules
或 快速删除
;
2、
Parsing error: Invalid ecmaVersion.
默认生成的配置文件中有一项是"ecmaVersion": 12,
,改成 11 或 10,虽然并不清楚有啥用;
3、
Do not access Object.prototype method ‘hasOwnProperty’ from target object.eslintno-prototype-builtins
出于安全并不建议直接用:foo.hasOwnProperty("bar")
,而应该写成 Object.prototype.hasOwnProperty.call(foo, "bar")
;
正则替换:
([a-z0-9]+)\.hasOwnProperty\(([^\)]+)\)
Object.prototype.hasOwnProperty.call($1, $2)
然后 VSCode 中 forin
的代码片段如下,看了已经修改过了:
1 | for (const key in object) { |
4、
The “marketId” property should be a constructor.eslintvue/require-prop-type-constructor
vue 中定义props
对像时,多个类型声明应写为数组;
1 | export default { |
5、
‘__dirname’ is not defined.eslintno-undef
错误提示出现在「vite.config.js」中;
解决:
.eslintrc.json 或其他格式的配置文件中,确保对应声明中存在"node": true,
这一项;
1 | { |
6、
The template root requires exactly one element.eslintvue/no-multiple-template-root
报错代码如下,将<template> ** </template>
改为<template><div> ** </div></template>
可以消除这个错误,但是不太科学;
1 | <template> |
正确方法,修改「.eslintrc.json」文件
"extends": ["eslint:recommended", "plugin:vue/essential"],
→"extends": ["eslint:recommended", "plugin:vue/vue3-essential"],
;