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

k4aesqcs  于 2022-12-08  发布在  Babel
关注(0)|答案(2)|浏览(342)

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

不带巴别塔解析器的Eslint:

eslint --no-eslintrc file.js

因为找不到错误,所以不显示输出。

带Babel解析器的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禁用严格模式:但失败了我还是犯了个错误
你知道用babel-parser禁用严格模式的方法吗?

monwx1rj

monwx1rj1#

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

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

或者,如果要通过cli进行设置,则只需:

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

sdnqo3pr2#

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

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

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

当错误消息被正确地实现时,它们是一个很好的资源,可以用来探查出复杂错误的根本原因。上面的错误消息不是最详细的错误消息,但它一针见血--该消息有两条相关的信息需要注意。
1.它是Parsing error,表示解析器解析JS文件时发生错误。
1.第二个错误是因为Octal literal位于正在**strict mode**中运行的脚本中。
分析器抛出了一个错误,因为在strict mode中运行的脚本中使用了一个八进制。
我认为从错误信息中可以明显看出,但是如果你还没有意识到,strict mode中不允许使用八进制。不管有没有ESLint,这都是正确的。仅供参考。

问题不在于严格模式-问题在于模块类型

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

答:

因为**'use strict';Strict Mode是ESM标准,并且所有ES Modules**都是在严格模式下解析的,因此;当ESLint解析以下类型的模块时,某些非严格结构(如上面的八进制文字)将导致解析错误:ESMCJSCommon-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 */
  }

相关问题