【问题标题】:Eslint disable strict mode when using babel parserEslint 在使用 babel 解析器时禁用严格模式
【发布时间】:2017-08-09 07:20:39
【问题描述】:

我正在使用 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 禁用严格模式的方法吗?

【问题讨论】:

    标签: javascript reactjs parsing babeljs eslint


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      要解决问题,首先要了解问题。



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

      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 中运行的脚本中使用了八进制。

      我认为从错误消息中可以明显看出,但如果您还没有意识到,strict mode 中不允许使用八进制。不管有没有 ESLint,这都是真的。仅供参考。


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

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



      问?

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

      答:

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

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

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

        {
          "parser": "@babel/eslint-parser",
          "parserOptions": {
            "sourceType": "script"
          },
        }
      
      

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

      {
       // package.json
      
        type: module /* or script */
      }
      

      【讨论】:

        猜你喜欢
        • 2023-01-05
        • 2022-06-23
        • 2016-06-15
        • 1970-01-01
        • 1970-01-01
        • 2021-01-30
        • 2019-12-14
        • 2015-04-29
        • 2020-10-13
        相关资源
        最近更新 更多