3 votes

Babel preset-env ne charge pas la syntaxe await de haut niveau pour le nœud cible

J'essaie la nouvelle syntaxe d'attente de niveau supérieur pour importer un module, mais Babel ne reconnaît pas la syntaxe, malgré l'utilisation de preset-env, à moins que je ne définisse explicitement le plugin @babel/plugin-syntax-top-level-await . Pourquoi dois-je spécifier manuellement ce plugin ? J'avais l'impression que preset-env s'occuperait de ces choses automatiquement ?

Pour le contexte, mes paramètres sont les suivants.

    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
  };

En cours d'exécution yarn run babel myFile.ts la sortie et l'erreur affichée sont :

@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');

En guise de question secondaire, pourquoi preset-env charge-t-il les 5 plugins syntaxiques affichés dans la sortie de débogage, mais ignore le plugin syntaxique de niveau supérieur en attente ?

2voto

aryzing Points 415

Cela se produit parce que preset-env charge seulement les propositions acceptées . Actuellement, le niveau supérieur attendu n'a pas encore été accepté dans la langue, il est à étape 3 .

En général, la liste des plugins disponibles pour preset-env provient de l'onglet compat-data paquet . La liste des plugins réellement utilisés par preset-env lors de l'exécution de Babel dépend des éléments suivants

L'erreur OP est survenue parce que Babel a été exécuté en ligne de commande. S'il avait été exécuté par babel-loader, le plugin "manquant" aurait été ajouté automatiquement comme mentionné dans le deuxième point ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X