Migrating to v3.0.0

迁移到v3.0.0

ESLint v3.0.0是第三个主要版本。我们在此版本中进行了几次重大更改,但是,我们认为这些更改足够小,以至于不需要对ESLint用户进行重大更改。本指南旨在引导您完成这些更改。

删除对Node.js<4的支持

使用ESLint v3.0.0,我们将放弃对4之前的Node.js版本的支持。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文件,无论是在您的项目或主目录。

2. 在命令行上使用--rule(或CLIEngine using rules)传递的配置选项。

3. 使用-c(或CLIEngine使用configFile)在命令行上传递的配置文件。

4. 使用该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月已停止使用,所有其他主动浏览器都允许悬挂逗号。因此,我们认为摇晃逗号现在是一个风格问题,而不是可能的错误。修改了以下规则:

  • complexityeslint:recommended如果您在不指定最大值的情况下打开规则,则会使用硬编码默认值11 。现在默认是20.该规则实际上总是默认为20,但是eslint:recommended错误地覆盖了它。

解决方法:如果您想模仿eslint:recommendedv2.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