Javascript 使用babel解析器时Eslint禁用严格模式
我使用eslint检查React项目中的有效JavaScript。但是,当我同时使用--规则'strict:0'和--parser=babel eslint时遇到了一个问题。 举例来说: 没有babel解析器的Eslint: 显示无输出,因为它未找到错误 带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
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 */
}