1

如果需要,我可以发布我的整个配置和 JavaScript 文件,但我正在尝试在我正在编写的一些 JavaScript 上运行 ESLint。我的“eslintrc.json”文件在配置中有这个(还有一些其他规则):

"rules": 
{
  // Thought this was my issue and hoped it would solve it.
  "env": 
  { 
    "es6": true 
  },

  "prefer-template": "error", //template literals

  "quotes": 
  [
    "error", 
    "double", 
    { "avoidEscape": true, "allowTemplateLiterals": true }
  ]
}

这是 ESLint 的 .log 文件中吐出的错误代码,以及它失败的代码。

Parsing error: Unexpected character '`' FolderName\FileName.js:31:17
function Something()
{
  // Seperated to try and debug the issue.
  var message = `Starting Something: ${ arguments.callee.name}`;
  //            ^
  Log.Message(message);

  SomeOtherFile.UpdateEnvironmentVariables();
 }

我知道默认情况下 ESLint 使用 ECMAScript 5(指定解析器选项),所以我尝试将其设置为 ECMA 6(具有模板字符串 - 请参阅上面的配置文件),但这似乎没有帮助。

奇怪的是,ESLint 文档(规则:引号)解释了反引号并提到它仅在 ECMAScript 6 等中。但似乎 ESLint 使用的解析器(Espree - On ESLint)有问题或其他东西。

我真的不想通过一些字符串连接替换所有这些,有什么建议吗?

4

1 回答 1

0

设置 ECMA 版本 2015 时,您在 eslint.org/demo 上编写的代码lints。好吧,有错误,但它们不是模板文字的用法。

这告诉我的是,您遇到了解析错误,而不是linting错误,需要设置解析器设置。

ECMA 版本设置为 5 时解析错误

ECMA 版本设置为 5 时解析错误


解析很好,当 ECMA 为 2015 时,您有 LINTING 错误

解析很好,当 ECMA 为 2015 时,您有 LINTING 错误


解决方案

要解决此问题,我认为您必须在某处提供一个 .eslintrc 文件,将解析器选项设置为 es2015 或更高版本。

仔细检查并尝试更改您的内容以包含以下内容:

    "parserOptions": {
        "ecmaVersion": 6,
        "sourceType": "script",
        "ecmaFeatures": {}
    }

因此,即使您的文件在顶部包含评论...

/*eslint-env es6 */

...解析器选项将胜出并杀死模板文字。而且,正如您所展示的,您的错误是解析错误,而不是 linting 错误:

Parsing error: Unexpected character '`' FolderName\FileName.js:31:17

我会欣然承认这是一个非常令人困惑的区别。直到我在这个答案上敲了一段时间才弄清楚,但这解释了为什么我的文件中的环境设置似乎并不总是“接受”;解析器选项会覆盖它们。

于 2021-02-18T18:29:45.143 回答