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

Javascript 使用babel解析器时Eslint禁用严格模式,javascript,reactjs,parsing,babeljs,eslint,Javascript,Reactjs,Parsing,Babeljs,Eslint,我使用eslint检查React项目中的有效JavaScript。但是,当我同时使用--规则'strict:0'和--parser=babel eslint时遇到了一个问题。 举例来说: 没有babel解析器的Eslint: 显示无输出,因为它未找到错误 带babel解析器的Eslint: 显示此错误: file.js 1:1 error Parsing error: Octal literal in strict mode > 39 | language.french.value

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

没有babel解析器的Eslint: 显示无输出,因为它未找到错误

带babel解析器的Eslint: 显示此错误:

file.js
1:1  error  Parsing error: Octal literal in strict mode
> 39 |  language.french.value           = ' caract\350res';
我试图用规则“strict:0”禁用严格模式,但失败了。我仍然得到先例错误


你知道使用babel解析器禁用严格模式的方法吗?

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

{
...
解析器:“babel eslint”,
解析选项:{
sourceType:“脚本”
}
...
}
或者,如果要通过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';


当错误消息被正确地实现时,它们是发现困难错误的根本原因的绝佳资源。上面的错误消息并不是最详细的错误消息,但它一针见血——消息中有两条相关的信息需要注意

  • 这是一个
    解析错误
    ,意味着解析器解析JS文件时出错

  • 第二个原因是,发生错误的原因是,在以
    严格模式运行的脚本中找到了
    八进制文本

  • 把它放在一起,它就会变得清晰。解析器抛出错误,因为在
    严格模式下运行的脚本中使用了八进制

    我认为从错误消息中可以明显看出这一点,但如果您还没有意识到,在
    严格模式下不允许使用八进制。无论是否有ESLint,这都是正确的。仅供参考


    问题不是严格模式-问题是模块类型 当代的
    ECMAScript
    实现了一种称为
    ES模块的东西,或者
    ESM
    。它们非常酷,但我不打算进一步解释它们是什么,它们是一个
    ECMAS
    支持的模块,这对于前端JS来说是比较新的。另一方面,Node拥有模块已经很长时间了,但是Node.js模块不是标准的ECMAS JavaScript。使用node,您现在可以创建、
    ESM
    模块或
    CJS
    模块



    Q 这些和我们的问题有什么关系

    A: 因为
    “使用严格的”
    ,或
    严格模式
    是ESM标准,所有
    ES模块
    都在严格模式下解析,因此;当ESLint解析类型为:
    ESM
    的模块时,一些非严格构造(如上面的八进制文字)将导致解析错误。类型为
    CJS
    Common JS Modules
    的模块通常依赖于那些“严格模式非法构造”(如八进制文字),如果依赖于它们,您的包将爆炸。我们对此无能为力

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

    //使用巴贝尔解析器,您可以做到这一点

      {
        "parser": "@babel/eslint-parser",
        "parserOptions": {
          "sourceType": "script"
        },
      }
    
    
    模块类型通常定义为
    脚本
    模块
    ,这是因为就ECMA而言,JavaScript文件要么是标准JS脚本,要么是
    ESM模块
    。如果您使用package.json文件,您还应该配置package.json文件

    {
     // package.json
    
      type: module /* or script */
    }
    
      {
        "parser": "@babel/eslint-parser",
        "parserOptions": {
          "sourceType": "script"
        },
      }
    
    
    {
     // package.json
    
      type: module /* or script */
    }