web-dev-qa-db-fra.com

Utiliser async / wait dans Node 6 avec Babel

J'essaie de configurer Babel pour Node v6.9.2. Je veux utiliser les constructions async/await.

Parce que je suis nouveau sur Babel et toutes les infrastructures Node, je ne sais pas comment le configurer correctement:

  • Quel préréglage dois-je utiliser? Node est déjà implémenté la plupart des fonctionnalités ES6. Je ne veux donc pas que Babel transpile les fonctionnalités déjà prises en charge par Node 6.9.x (fonctions fléchées, nouveau mécanisme d'importation, etc.) pour des raisons de performances.

  • Quels plugins dois-je inclure pour pouvoir utiliser async/wait? Là, j'ai également confondu, car après quelques recherches, j'ai trouvé plusieurs plugins: syntax-async-functions, transform-async-to-generator et encore plus.

Exemple de .babelrc aidera.

Merci

17
MyTitle

Quel préréglage dois-je utiliser?

Vous n'avez pas besoin d'utiliser de préréglage. Les préréglages ne sont qu'une collection de plugins qui le rend plus facile à utiliser si vous souhaitez transpiler un ensemble de fonctionnalités (par exemple, tous les ES2015 avec preset-es2015). Mais lorsque vous ne souhaitez transpiler qu'une sélection de ces fonctionnalités, vous n'incluez que les plugins correspondants.

Quels plugins dois-je inclure pour pouvoir utiliser async/wait?

Parce que Node 6 prend en charge les générateurs, vous pouvez utiliser transform-async-to-generator avec ce qui suit .babelrc:

{
  "plugins": ["transform-async-to-generator"]
}

Et bien sûr, vous devrez ajouter des plugins si vous avez besoin de transpiler plus de fonctionnalités non prises en charge.

Alternative babel-preset-env

babel-preset-env détermine automatiquement les plugins dont vous avez besoin pour l'environnement spécifié. Cela n'inclura aucun plugin qui n'est pas nécessaire. Pour spécifier votre version Node version, vous utiliseriez cette .babelrc:

{
  "presets": [
    ["env", {
      "targets": {
        "node": "current"
      }
    }]
  ]
}
15
Michael Jungo

Réponse courte

Utilisez le préréglage Babel pour Node 6.x:

Longue réponse

Pour voir quelle fonctionnalité ES est prise en charge dans une version donnée Node, voir:

Pour la prise en charge de async/await en particulier, voir:

Si vous utilisez Node v7.x (la version actuelle), vous pouvez utiliser le --harmony flag et utiliser async/await en natif sans transpilation.

Le noeud v8.x (disponible en version nocturne) n'a même pas besoin du --harmony drapeau pour cela.

Mais notez que Node ne prend pas en charge import/export - pour savoir pourquoi voir:

10
rsp