![](/img/trans.png)
[英]Disable/Ignore Babel strict mode for transpiling javascript files
[英]Eslint disable strict mode when using babel parser
我正在使用 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 禁用严格模式的方法吗?
我刚刚遇到了同样的问题,终于在github上找到了答案。 您可以通过将sourceType
更改为 .eslintrc 文件中的script
来关闭全局严格模式:
{
...
parser: 'babel-eslint',
parserOptions: {
sourceType: 'script'
}
...
}
或者,如果您想通过 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';
当错误消息被正确实施时,它们是找出困难错误根本原因的重要资源。 上面的错误消息不是最冗长的错误消息,但它一针见血——该消息有 2 条相关信息需要注意。
它是Parsing error
,表示解析器在解析 JS 文件时发生错误。
并且,第二个是发生错误是因为Octal literal
位于以strict mode
运行的脚本中。
放在一起,就清楚了。 解析器抛出错误,因为在strict mode
运行的脚本中使用了八进制。
我认为从错误消息中可以明显看出,但如果您还没有意识到, Octal's are not allowed in strict mode
。 不管有没有 ESLint,这都是真的。 仅供参考。
当代ECMAScripts
已经实现了一种叫做ES-Modules
或ESM
的东西。 它们非常酷,但我不打算解释它们比ECMAS
支持的模块更进一步,这对于前端 JS 来说是相对较新的东西。 另一方面,Node 已经有很长时间的模块了,但是Node.js Modules
不是标准的 ECMAS JavaScript。 使用 node,您现在可以创建ESM
模块或CJS
模块。
这与我们的问题有什么关系?
好吧,因为'use strict';
, 或者Strict Mode
是 ESM 标准,所有的ES Modules
都是在严格模式下解析的,因此; 当 ESLint 解析 type: ESM
的模块时,一些非严格的结构,比如上面的八进制文字,会导致解析错误。 类型为CJS
或Common-JS Modules
通常依赖于那些“严格模式的非法构造”(如八进制文字),如果你依赖它们,你的包就会崩溃。 对此我们无能为力。
配置 ESLint 解析器以解析正确类型的模块很重要:
// 使用 babel 解析器你会这样做
// @file ".eslintrc(.?)"
{
"parser": "@babel/eslint-parser",
"parserOptions": {
"sourceType": "script"
}
}
模块类型通常定义为Scripts
或Modules
,这是因为就 ECMAS 而言,JavaScript 文件要么是标准 JS 脚本,要么是ESM Module
。 如果您使用 package.json 文件,您还应该配置它。
// @file "package.json"
{
type: module /* or script */
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.