drm*_*wer 3 javascript lint eslint eslintrc aws-cloud9
使用以下 Node.js 代码:
import { fileURLToPath } from 'node:url';
import path from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(fileURLToPath(import.meta.url));
Run Code Online (Sandbox Code Playgroud)
我看到以下与参考相关的 lint 错误import.meta.url
:
此代码段将按照node.js 指南__filename
复制并复制到 ESM 中。使用如下时会出现相同的错误...这也在官方指南中:__dirname
import.meta.url
import { readFileSync } from 'fs';
const buffer = readFileSync(new URL('./data.proto', import.meta.url));
Run Code Online (Sandbox Code Playgroud)
我已经看过这个,但它没有解决我的问题。这是专门在 Cloud9 IDE 中......不是当前的 AWS Cloud9,而是基于此存储库的自托管 Cloud9 (最后更新于 4 年前)。(AWS) Cloud9 的唯一指导在此页面上:
我可以使用此.eslintrc
文件获得某些基本规则,例如
{
rules: {
semi: ["error", "never"]
}
}
Run Code Online (Sandbox Code Playgroud)
所以我知道配置文件正在IDE中生效。但看不到禁用“意外令牌导入”错误的适当规则。
编辑:以下内容似乎相关,但我无法确定它是否真正得出了结论:
https://github.com/eslint/eslint/issues/12518
这实际上是一个有根据的猜测,因为我没有使用 Cloud9 IDE。如果您的 .eslintrc 文件被识别,您需要添加适当的解析器选项,例如:
{
"parserOptions": {
"ecmaVersion": 2020,
"sourceType": "module"
},
"rules": {
"semi": ["error", "never"]
}
}
Run Code Online (Sandbox Code Playgroud)
原因是 ESLint 解析器默认将所有 JavaScript 源视为 ES5 脚本,而import.meta
自 ECMAScript 2020 以来,该语法仅在模块中允许。
更新
"ecmaVersion": 2020
ESLint 6 及以上版本支持该设置。另一个需要认识到的选择import.meta
是使用像 Babel 这样的自定义解析器。为Babel 解析器安装的软件包是@babel/core
和@babel/eslint-parser
。.eslintrc中的相关设置在这里:
{
"parser": "@babel/eslint-parser",
"parserOptions": {
"ecmaVersion": 2020,
"requireConfigFile": false
},
Run Code Online (Sandbox Code Playgroud)
注意:我无法在其存储库的文档中找到 Babel 解析器支持哪些版本的 ESLint(上面的链接)。我在代码中只能看到支持ESLint 7和8。如果 Babel 的当前版本无法与您的 ESLint 版本兼容,您可能需要尝试安装旧版本并查看它们是否有效。在这种情况下,可能需要额外的插件,例如syntax-import-meta 。
归档时间: |
|
查看次数: |
2875 次 |
最近记录: |