我使用eslint来检查React项目中的有效JavaScript。但是,当我同时使用 - rule' strict:0' 和 - parser = babel-eslint 时,我遇到了一个问题。 例如:
eslint --no-eslintrc file.js
不显示输出,因为它没有找到错误。
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禁用严格模式的方法?
答案 0 :(得分:2)
我遇到了同样的问题,最后发现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
答案 1 :(得分:0)
您收到的错误消息来自解析器。输出如下:
file.js
1:1 error Parsing error: Octal literal in strict mode
> 39 | language.french.value = ' caract\350res';
当错误消息被正确实施时,它们是找出困难错误根本原因的重要资源。上面的错误消息不是最详细的错误消息,但它一针见血——该消息有 2 条相关信息需要注意。
它是一个 Parsing error
,表示解析器在解析 JS 文件时发生错误。
而且,第二个错误是因为 Octal literal
位于 strict mode
中运行的脚本中。
放在一起,就一目了然了。解析器抛出错误,因为在 strict mode
中运行的脚本中使用了八进制。
我认为错误消息很明显,但如果您没有意识到,strict mode
中不允许使用八进制。不管有没有 ESLint,这都是真的。仅供参考。
同时代的ECMAScripts
已经实现了一种叫做ES-Modules
或ESM
的东西。它们非常酷,但我不会解释它们比ECMAS
支持的模块更进一步的内容,这是前端 JS 相对较新的东西。另一方面,Node 已经有很长时间的模块了,但是 Node.js Modules
不是标准的 ECMAS JavaScript。使用节点,您现在可以创建 ESM
模块或 CJS
模块。
这些与我们的问题有什么关系?
好吧,因为 'use strict';
或 Strict Mode
是 ESM 标准,并且所有 ES Modules
以严格模式解析,因此;当 ESLint 解析类型为 ESM
的模块时,一些非严格结构,如上面的八进制文字,会导致解析错误。类型为 CJS
或 Common-JS Modules
的模块通常依赖于那些“严格模式非法构造”(如八进制文字),如果你依赖它们,你的包就会爆炸。我们对此无能为力。
配置 ESLint 解析器以解析正确类型的模块很重要:
// 使用 babel 解析器你会这样做
{
"parser": "@babel/eslint-parser",
"parserOptions": {
"sourceType": "script"
},
}
模块类型通常定义为Scripts
或Modules
,这是因为就ECMAS 而言,JavaScript 文件要么是标准JS 脚本,要么是ESM Module
。如果您使用 package.json 文件,您还应该配置它。
{
// package.json
type: module /* or script */
}