编程方式调用
ESLint类
ESLint
类是在 Node.js 应用程序中使用的主要类
这个类依赖于 Node.js 的 fs
模块和文件系统,所以你不能在浏览器中使用它。如果你想在浏览器上提示代码,请使用 [Linter][linter] 类代替
简单例子
const { ESLint } = require("eslint");
(async function main() {
// 1. 创建实例
const eslint = new ESLint();
// 2. 检查文件
const results = await eslint.lintFiles(["lib/**/*.js"]);
// 3. 格式化结果
const formatter = await eslint.loadFormatter("stylish");
const resultText = formatter.format(results);
// 4. 输出
console.log(resultText);
})().catch((error) => {
process.exitCode = 1;
console.error(error);
});
const { ESLint } = require("eslint");
(async function main() {
// 1. 创建实例
const eslint = new ESLint();
// 2. 检查文件
const results = await eslint.lintFiles(["lib/**/*.js"]);
// 3. 格式化结果
const formatter = await eslint.loadFormatter("stylish");
const resultText = formatter.format(results);
// 4. 输出
console.log(resultText);
})().catch((error) => {
process.exitCode = 1;
console.error(error);
});
自动修复检查出的问题例子
const { ESLint } = require("eslint");
(async function main() {
// 1. 用 `fix` 选项创建实例
const eslint = new ESLint({ fix: true });
// 2. 检查文件,这不会修改目标文件
const results = await eslint.lintFiles(["lib/**/*.js"]);
// 3. 用固定的代码修改文件
await ESLint.outputFixes(results);
// 4. 格式化结果
const formatter = await eslint.loadFormatter("stylish");
const resultText = formatter.format(results);
// 5. 输出
console.log(resultText);
})().catch((error) => {
process.exitCode = 1;
console.error(error);
});
const { ESLint } = require("eslint");
(async function main() {
// 1. 用 `fix` 选项创建实例
const eslint = new ESLint({ fix: true });
// 2. 检查文件,这不会修改目标文件
const results = await eslint.lintFiles(["lib/**/*.js"]);
// 3. 用固定的代码修改文件
await ESLint.outputFixes(results);
// 4. 格式化结果
const formatter = await eslint.loadFormatter("stylish");
const resultText = formatter.format(results);
// 5. 输出
console.log(resultText);
})().catch((error) => {
process.exitCode = 1;
console.error(error);
});
new ESLint(options)
const eslint = new ESLint(options);
const eslint = new ESLint(options);
创建新的 ESLint
实例
ESLint
构造函数接收一个 options
对象。如果你省略了 options
对象,那么它对所有选项使用默认值。options
对象有以下属性:
https://zh-hans.eslint.org/docs/latest/integrate/nodejs-api#参数
eslint.lintFiles(patterns)
eslint.lintText(code, options)
const results = await eslint.lintText(code, options);
const results = await eslint.lintText(code, options);
该方法对给定的源代码文本进行检查,然后返回结果
默认情况下,该方法会使用当前工作目录下配置文件的配置(cwd
构造函数选项)。如果你想使用不同的配置文件的配置,传递 options.filePath
,ESLint 将加载 eslint.lintFiles()
对 options.filePath
处的文件使用的配置
eslint.getRulesMetaForResults(results)
const results = await eslint.lintFiles(patterns);
const rulesMeta = eslint.getRulesMetaForResults(results);
const results = await eslint.lintFiles(patterns);
const rulesMeta = eslint.getRulesMetaForResults(results);
该方法返回一个对象,其中包含每个在给定的 results
中触发 lint 错误的规则的元信息。
eslint.calculateConfigForFile(filePath)
const config = await eslint.calculateConfigForFile(filePath);
const config = await eslint.calculateConfigForFile(filePath);
这个方法计算一个给定文件的配置,这对调试很有用。
- 它解析并合并
extends
和overrides
设置到顶层配置 - 它将
parser
设置解析为绝对路径 - 它将
plugins
设置规范化,以对齐短名称(如eslint-plugin-foo
→foo
) - 如果匹配了一个传统的文件扩展处理器,它会添加
processor
设置 - 它不解释
env
设置到globals
和parserOptions
设置,所以结果对象包含env
设置
eslint.isPathIgnored(filePath)
const isPathIgnored = await eslint.isPathIgnored(filePath);
const isPathIgnored = await eslint.isPathIgnored(filePath);
这个方法检查一个给定的文件是否被你的配置所忽略
filePath
(string
)你想检查的文件的路径
ESLint.outputFixes(results)
await ESLint.outputFixes(results);
await ESLint.outputFixes(results);
该方法将 ESLint 的自动修复功能所修改的代码写入其各自的文件中。如果任何被修改的文件不存在,这个方法不做任何事情。
这是一个静态方法
ESLint.getErrorResults(results)
const filteredResults = ESLint.getErrorResults(results);
const filteredResults = ESLint.getErrorResults(results);
该方法复制给定的结果并删除警告。返回值只包含错误
这是一个静态方法
解析配置文件
const config = await eslint.calculateConfigForFile(filePath);
const config = await eslint.calculateConfigForFile(filePath);
这个方法计算给定文件的配置,对于调试目的非常有用
它将extends和overrides设置解析和合并到顶层配置中。 它将解析器设置解析为绝对路径。 它将插件设置规范化为对齐的短名称(例如,eslint-plugin-foo → foo)。 如果匹配到一个旧文件扩展处理器,它会添加处理器设置。 它不会将env设置解释为全局和parserOptions设置,因此结果对象包含原始的env设置
判断是否存在配置文件
存在则返回config信息
const { ESLint } = require("eslint");
const path = require("path");
(async function main() {
const eslint = new ESLint();
eslint
.calculateConfigForFile(path.resolve("lib/index.js"))
.then((config) => {
console.log("存在 ESLint 配置文件", config);
})
.catch((err) => {
if (err.message.includes("No ESLint configuration found")) {
console.log("不存在 ESLint 配置文件");
}
});
})().catch((error) => {
process.exitCode = 1;
console.error(error);
});
const { ESLint } = require("eslint");
const path = require("path");
(async function main() {
const eslint = new ESLint();
eslint
.calculateConfigForFile(path.resolve("lib/index.js"))
.then((config) => {
console.log("存在 ESLint 配置文件", config);
})
.catch((err) => {
if (err.message.includes("No ESLint configuration found")) {
console.log("不存在 ESLint 配置文件");
}
});
})().catch((error) => {
process.exitCode = 1;
console.error(error);
});
linter
Linter
对象对 JavaScript 代码进行实际评估。它不做任何文件系统的操作,只是对代码进行解析和报告。特别是,Linter
对象不处理配置对象或文件。除非你在浏览器中工作,否则你可能想用 ESLint 类 代替。
Linter
是一个构造函数,你可以通过传入你想使用的选项来创建一个新实例。可用的选项有:
自动修复文本
linter.verifyAndFix
const Linter = require("eslint").Linter;
const linter = new Linter();
const messages = linter.verifyAndFix("var foo;", {
rules: {
semi: 2,
"no-unused-vars": 2,
},
});
console.log(messages);
const Linter = require("eslint").Linter;
const linter = new Linter();
const messages = linter.verifyAndFix("var foo;", {
rules: {
semi: 2,
"no-unused-vars": 2,
},
});
console.log(messages);