В preset-env Babel не загружается синтаксис верхнего уровня, ожидающий цели узла - PullRequest
0 голосов
/ 06 апреля 2020

Я пробую новый синтаксис ожидания верхнего уровня для импорта модуля, но 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 плагинов синтаксиса, показанных в выходных данных отладки, но пропускает плагин синтаксиса верхнего уровня в ожидании синтаксиса?

1 Ответ

0 голосов
/ 07 апреля 2020

Это происходит потому, что preset-env загружает только принятые предложения . В настоящее время ожидание на высшем уровне еще не принято на языке, оно находится на этапе 3 .

В общем, список плагинов, доступных для preset-env, взят из compat-data пакет . Список плагинов, фактически используемых preset-env при запуске Babel, зависит от

. Произошла ошибка OP, потому что Babel был запущен из командной строки. Если бы он был запущен babel-loader, «отсутствующий» плагин был бы добавлен автоматически, как упомянуто во втором пункте выше.

...