Skip to content
索引

编程方式调用

https://eslint.org/docs/latest/integrate/nodejs-api

https://zh-hans.eslint.org/docs/latest/integrate/nodejs-api

ESLint类

ESLint 类是在 Node.js 应用程序中使用的主要类

这个类依赖于 Node.js 的 fs 模块和文件系统,所以你不能在浏览器中使用它。如果你想在浏览器上提示代码,请使用 [Linter][linter] 类代替

简单例子

js
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);
});

自动修复检查出的问题例子

js
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)

js
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)

js
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)

js
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)

js
const config = await eslint.calculateConfigForFile(filePath);
const config = await eslint.calculateConfigForFile(filePath);

这个方法计算一个给定文件的配置,这对调试很有用。

  • 它解析并合并 extendsoverrides 设置到顶层配置
  • 它将 parser 设置解析为绝对路径
  • 它将 plugins 设置规范化,以对齐短名称(如 eslint-plugin-foofoo)
  • 如果匹配了一个传统的文件扩展处理器,它会添加 processor 设置
  • 它不解释 env 设置到 globalsparserOptions 设置,所以结果对象包含 env 设置

eslint.isPathIgnored(filePath)

js
const isPathIgnored = await eslint.isPathIgnored(filePath);
const isPathIgnored = await eslint.isPathIgnored(filePath);

这个方法检查一个给定的文件是否被你的配置所忽略

filePathstring)你想检查的文件的路径

ESLint.outputFixes(results)

js
await ESLint.outputFixes(results);
await ESLint.outputFixes(results);

该方法将 ESLint 的自动修复功能所修改的代码写入其各自的文件中。如果任何被修改的文件不存在,这个方法不做任何事情。

这是一个静态方法

ESLint.getErrorResults(results)

js
const filteredResults = ESLint.getErrorResults(results);
const filteredResults = ESLint.getErrorResults(results);

该方法复制给定的结果并删除警告。返回值只包含错误

这是一个静态方法

解析配置文件

js
const config = await eslint.calculateConfigForFile(filePath);
const config = await eslint.calculateConfigForFile(filePath);

这个方法计算给定文件的配置,对于调试目的非常有用

它将extends和overrides设置解析和合并到顶层配置中。 它将解析器设置解析为绝对路径。 它将插件设置规范化为对齐的短名称(例如,eslint-plugin-foo → foo)。 如果匹配到一个旧文件扩展处理器,它会添加处理器设置。 它不会将env设置解释为全局和parserOptions设置,因此结果对象包含原始的env设置

判断是否存在配置文件

存在则返回config信息

js
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

js
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);

Released under the MIT License.