javascript - Babel preset-env 未加载 Node 目标的顶级等待语法

标签 javascript node.js babeljs top-level-await

我正在尝试使用新的顶级 await 语法来导入模块,但 Babel 无法识别语法,尽管使用了 preset-env,除非我明确设置插件 @babel/plugin-syntax-top -level-await.为什么我必须手动指定这个插件?我的印象是 preset-env 会自动处理这些事情?

对于上下文,我的设置如下:

    presets: [
      [
        '@babel/preset-env',
        {
          debug: true,
          modules: false,
          useBuiltIns: 'usage',
          corejs: 3,
        },
      ],
      '@babel/preset-typescript',
    ],
    // plugins: ['@babel/plugin-syntax-top-level-await'], // Commented b/c I was experimenting
  };

当运行 yarn run babel myFile.ts 时,输出和抛出的错误是:

@babel/preset-env: `DEBUG` option
Using targets:
{
  "node": "13.12"
}
Using modules transform: false
Using plugins:
  proposal-nullish-coalescing-operator { "node":"13.12" }
  proposal-optional-chaining { "node":"13.12" }
  syntax-json-strings { "node":"13.12" }
  syntax-optional-catch-binding { "node":"13.12" }
  syntax-async-generators { "node":"13.12" }
  syntax-object-rest-spread { "node":"13.12" }
  syntax-dynamic-import { "node":"13.12" }
Using polyfills with `usage` option:
SyntaxError: /path/to/project/src/storage/index.ts: Unexpected token, expected ";" (4:6)
  2 | import { AppError } from '../errors';
  3 | 
> 4 | await import('./db/dbDiskMethods');
    |       ^
  5 | 
  6 | const getDbDiskMethods = async () => {
  7 |   return await import('./db/dbDiskMethods');

作为附带问题,为什么 preset-env 会加载调试输出中显示的 5 个语法插件,但会跳过顶级 await 语法插件?

最佳答案

这是因为 preset-env 只加载 accepted proposals .目前,顶级 await 还没有被语言接受,它位于 stage 3。 .

一般来说,preset-env 可用的插件列表来自 compat-data package .运行 babel 时 preset-env 实际使用的插件列表取决于

由于 Babel 是从命令行运行的,因此引发了 OP 错误。如果它是由 babel-loader 运行的,那么“丢失”的插件会自动添加,如上面第二点所述。

关于javascript - Babel preset-env 未加载 Node 目标的顶级等待语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61056049/

相关文章:

javascript - 修复了数据表中的行排序

node.js - 意外的 token 异步 ()

javascript - MS Teams 无法在网络摄像头测试中工作,但无法在 MS Teams 中工作

javascript - 在 Node.js 模块中立即调用

javascript - 如何在使用 nodejs 和 babel 进行集成测试时 stub 导入模块中的函数

javascript - 动态添加 anchor 到段落元素不起作用

javascript - 具有相同功能调用的多个按钮,但仅针对第一个按钮显示警报

javascript - 用红色标记一列中的 0 号

typescript - 使用@babel/plugin-transform-typescript 编译 typescript 时如何修复警告

javascript - ReactJS 在 codepen 中不工作