版本

迁移到 v3.0.0

ESLint v3.0.0 是第三个主要版本发布。我们在这个版本中做了一些破坏性变更,但是,我们相信这些变更是足够小的,它们不应该需要 ESLint 用户进行重大更改。本指南旨在引导您了解这些变更。

放弃支持 Node.js < 4

在 ESLint v3.0.0 中,我们放弃了对 Node.js 4 之前版本的支持。Node.js 0.10 和 0.12 处于维护模式,而 Node.js 4 是当前的 LTS 版本。如果您正在使用旧版本的 Node.js,我们建议您尽快升级到至少 Node.js 4。如果您无法升级到 Node.js 4 或更高版本,那么我们建议您继续使用 ESLint v2.x,直到您准备好升级 Node.js。

重要提示: 我们将不会更新 ESLint v2.x 版本。所有错误修复和增强功能都将在 ESLint v3.x 中发布。

运行需要配置

ESLint v3.0.0 现在要求您使用配置才能运行。配置可以是以下任何一种:

  1. 项目目录或主目录中的 .eslintrc.js.eslintrc.json.eslintrc.yml.eslintrc.yaml.eslintrc 文件。
  2. 使用 --rule(或使用 rules 到 CLIEngine)在命令行上传递的配置选项。
  3. 使用 -c(或使用 configFile 到 CLIEngine)在命令行上传递的配置文件。
  4. 使用 baseConfig 选项提供给 CLIEngine 的基本配置。

如果 ESLint 找不到配置,它将抛出一个错误并要求您提供一个配置。

此更改旨在帮助新的 ESLint 用户,他们经常对 ESLint 默认情况下除了报告解析器错误之外什么都不做感到困惑。我们预计此更改对大多数老用户的影响很小,因为您更有可能已经拥有配置文件。

要解决: 您应该确保在每次运行 ESLint 时都使用配置。但是,您仍然可以通过在命令行上传递 --no-eslintrc 选项或将 CLIEngineuseEslintrc 选项设置为 false 来在没有配置的情况下运行 ESLint。

要创建新配置,请使用 eslint --init

"eslint:recommended" 的变更

{
    "extends": "eslint:recommended"
}

在 3.0.0 中,以下规则已添加到 "eslint:recommended"

  • no-unsafe-finally 帮助捕获可能无法按您预期行为的 finally 子句。
  • no-native-reassign 之前是 no-undef 的一部分,但由于作为另一个规则的一部分没有意义而被拆分出来。no-native-reassign 规则会在您尝试覆盖只读全局变量时发出警告。
  • require-yield 帮助识别没有 yield 关键字的生成器函数。

以下规则已从 "eslint:recommended" 中移除:

以下规则已修改:

  • complexity 过去在 eslint:recommended 中有一个硬编码的默认值 11,如果您在不指定最大值的情况下启用该规则,则会使用该默认值。现在的默认值是 20。该规则实际上一直有一个默认值 20,但 eslint:recommended 错误地覆盖了它。

要解决: 如果您想模仿 eslint:recommended 在 v2.x 中的工作方式,您可以使用以下配置:

{
    "extends": "eslint:recommended",
    "rules": {
        "no-unsafe-finally": "off",
        "no-native-reassign": "off",
        "complexity": ["off", 11],
        "comma-dangle": "error",
        "require-yield": "error"
    }
}

CLIEngine#executeOnText() 的变更

CLIEngine#executeOnText() 方法已更改为更像 CLIEngine#executeOnFiles() 的工作方式。在 v2.x 中,CLIEngine#executeOnText() 默认情况下会警告忽略的文件,并且没有办法选择退出这些警告,而 CLIEngine#executeOnFiles() 默认情况下不会警告忽略的文件,并允许您选择加入警告它们。CLIEngine#executeOnText() 方法现在默认情况下也不警告忽略的文件,并允许您使用新的第三个参数选择加入(一个布尔值,true 表示警告忽略的文件,false 表示不警告)。

要解决: 如果您当前在您的项目中像这样使用 CLIEngine#executeOnText()

var result = engine.executeOnText(text, filename);

您可以使用以下方法获得等效的行为:

var result = engine.executeOnText(text, filename, true);

如果您不希望将忽略的文件警告输出到控制台,您可以省略第三个参数或传递 false

更改语言