繁体   English   中英

Eslint 在使用 babel 解析器时禁用严格模式

[英]Eslint disable strict mode when using babel parser

我正在使用 eslint 来检查 React 项目中的有效 JavaScript。 但是,当我同时使用--rule 'strict: 0'--parser=babel-eslint时遇到了一个问题。 举例:

没有 babel 解析器的 Eslint:

eslint --no-eslintrc file.js

不显示输出,因为它没有发现错误。

带有 babel-parser 的 Eslint:

eslint --no-eslintrc --parser=babel-eslint file.js

显示此错误:

file.js
1:1  error  Parsing error: Octal literal in strict mode
> 39 |  language.french.value           = ' caract\350res';

我尝试使用--rule 'strict: 0'禁用严格模式,但失败了。 我仍然得到先前的错误。

你知道使用 babel-parser 禁用严格模式的方法吗?

我刚刚遇到了同样的问题,终于在github上找到了答案 您可以通过将sourceType更改为 .eslintrc 文件中的script来关闭全局严格模式:

{
  ...
  parser: 'babel-eslint',
  parserOptions: {
    sourceType: 'script'
  }
  ...
}

或者,如果您想通过 cli 进行设置,那么只需:

eslint --no-eslintrc --parser=babel-eslint --parser-options=sourceType:script file.js

要解决问题,我们需要首先了解问题。



您收到的错误消息来自解析器。 输出以下内容:

file.js
1:1  error  Parsing error: Octal literal in strict mode
> 39 |  language.french.value           = ' caract\350res';


当错误消息被正确实施时,它们是找出困难错误根本原因的重要资源。 上面的错误消息不是最冗长的错误消息,但它一针见血——该消息有 2 条相关信息需要注意。

  1. 它是Parsing error ,表示解析器在解析 JS 文件时发生错误。

  2. 并且,第二个是发生错误是因为Octal literal位于以strict mode运行的脚本中。

放在一起,就清楚了。 解析器抛出错误,因为在strict mode运行的脚本中使用了八进制。

我认为从错误消息中可以明显看出,但如果您还没有意识到, Octal's are not allowed in strict mode 不管有没有 ESLint,这都是真的。 仅供参考。


问题不是严格模式——问题是模块类型

当代ECMAScripts已经实现了一种叫做ES-ModulesESM的东西。 它们非常酷,但我不打算解释它们比ECMAS支持的模块更进一步,这对于前端 JS 来说是相对较新的东西。 另一方面,Node 已经有很长时间的模块了,但是Node.js Modules不是标准的 ECMAS JavaScript。 使用 node,您现在可以创建ESM模块或CJS模块。



问?

这与我们的问题有什么关系?

A:

好吧,因为'use strict'; , 或者Strict Mode是 ESM 标准,所有的ES Modules都是在严格模式下解析的,因此; 当 ESLint 解析 type: ESM的模块时,一些非严格的结构,比如上面的八进制文字,会导致解析错误。 类型为CJSCommon-JS Modules通常依赖于那些“严格模式的非法构造”(如八进制文字),如果你依赖它们,你的包就会崩溃。 对此我们无能为力。

配置 ESLint 解析器以解析正确类型的模块很重要:

// 使用 babel 解析器你会这样做

// @file ".eslintrc(.?)"
  {
      "parser": "@babel/eslint-parser",
      "parserOptions": {
        "sourceType": "script"
      }
  }

模块类型通常定义为ScriptsModules ,这是因为就 ECMAS 而言,JavaScript 文件要么是标准 JS 脚本,要么是ESM Module 如果您使用 package.json 文件,您还应该配置它。

  // @file "package.json"

  {
      type: module /* or script */
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM