迁移到 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 现在要求您使用配置才能运行。配置可以是以下任何一种:
- 项目目录或主目录中的
.eslintrc.js
、.eslintrc.json
、.eslintrc.yml
、.eslintrc.yaml
或.eslintrc
文件。 - 使用
--rule
(或使用rules
到 CLIEngine)在命令行上传递的配置选项。 - 使用
-c
(或使用configFile
到 CLIEngine)在命令行上传递的配置文件。 - 使用
baseConfig
选项提供给 CLIEngine 的基本配置。
如果 ESLint 找不到配置,它将抛出一个错误并要求您提供一个配置。
此更改旨在帮助新的 ESLint 用户,他们经常对 ESLint 默认情况下除了报告解析器错误之外什么都不做感到困惑。我们预计此更改对大多数老用户的影响很小,因为您更有可能已经拥有配置文件。
要解决: 您应该确保在每次运行 ESLint 时都使用配置。但是,您仍然可以通过在命令行上传递 --no-eslintrc
选项或将 CLIEngine
的 useEslintrc
选项设置为 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"
中移除:
comma-dangle
过去被推荐是因为 Internet Explorer 8 及更早版本在对象字面量属性上发现尾随逗号时会抛出语法错误。但是,Internet Explorer 8 已于 2016 年 1 月停止生命周期支持,所有其他活跃浏览器都允许尾随逗号。因此,我们认为尾随逗号现在是一个风格问题,而不是可能的错误。
以下规则已修改:
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
。