web-dev-qa-db-fra.com

babel vs babel-core vs babel-runtime

Le projet Webpack de mon nœud utilise trois bibliothèques Babel. Quelle est la différence entre ceux-ci et comment sont-ils utilisés?

"dependencies": {
  "babel-runtime": "^5.8.24"
}

"dev-dependencies": {
  "babel": "^5.8.23",
  "babel-core": "^5.8.23"
}
51
Kevin Wu

babel-core est l'API. Pour la version 5, le package babel est la CLI et dépend de babel-core. Pour la v6, le package babel-cli est la CLI (la commande bin de la CLI est toujours babel cependant) et le package babel ne fait rien. babel-runtime Je suppose que c'est juste le moteur d'exécution (polyfill et helpers) qui prend en charge un code déjà transformé.

40
JMM

TL; DR Les choses à comparer ici sont:

  1. babel (utilisation pour 5.x.x) vs babel-cli + babel-core (en choisir une pour 6.x.x)
  2. babel-polyfill (utilisation pour les non-bibliothèques) vs babel-runtime + babel-plugin-transformation-runtime (utilisation pour les bibliothèques)

De https://babeljs.io/blog/2015/10/31/setting-up-babel-6 :

Le paquet babel n'est plus. Auparavant, il s'agissait de l'ensemble du compilateur et de toutes les transformations, ainsi que de nombreux outils de l'interface de ligne de commande, mais cela entraînait des téléchargements inutilement volumineux et était un peu déroutant. Nous l’avons maintenant divisée en deux packages distincts: babel-cli et babel-core.

npm installer --global babel-cli

ou

npm installer --save-dev babel-core

Si vous souhaitez utiliser Babel à partir de la CLI, vous pouvez installer babel-cli ou si vous souhaitez utiliser l'API Node, vous pouvez installer babel-core.

babel-runtime n'autorise que les polyfill qui ne polluent pas l'espace global, contrairement à babel-polyfill qui pollue votre espace global. De http://babeljs.io/docs/plugins/transform-runtime/ :

[babel-runtime] polyfille automatiquement votre code sans polluer les globaux. (Ce plugin est recommandé dans une bibliothèque/un outil)

Si vous utilisez babel-runtime, vous devriez aussi

npm install --save-dev babel-plugin-transform-runtime

Dans la plupart des cas, vous devez installer babel-plugin-transform-runtime en tant que dépendance de développement (avec --save-dev) et babel-runtime en tant que dépendance de production (avec --save).

Le plug-in de transformation est généralement utilisé uniquement en développement, mais votre code déployé/publié dépendra du moteur d'exécution.

De plus, babel-runtime + babel-plugin-transform-runtime et babel-polyfill s'excluent généralement de manière mutuellement exclusive, ce qui signifie que vous ne devez utiliser que l'un ou l'autre. Extrait d'un commentaire ici http://jamesknelson.com/the-six-things-you-need-to-know-about-babel-6/ :

Vous devriez utiliser babel-polyfill ou babel-runtime. Elles s’excluent mutuellement - à moins bien sûr que vous sachiez ce que vous faites. Mais ce sont essentiellement la même chose. Ce ne sont que des aides. babel-polyfill atteint le même objectif en migrant des globals alors que babel-runtime le fait de manière modulaire. Sauf si vous développez une bibliothèque, je vous recommande d’utiliser le polyfill.

19
Kevin

Les six choses à savoir sur Babel 6 a très bien expliqué cela, pour citer

Le paquet babel npm n'existe plus. Au lieu de cela, Babel a été divisé en plusieurs paquets:

babel-cli, qui contient l'interface de ligne de commande babel babel-core, qui contient l’API du nœud et nécessite un crochet babel-polyfill, qui Si nécessaire, vous installe dans un environnement ES2015 complet. À éviter conflits accidentels, assurez-vous de supprimer tous les paquets Babel précédents comme babel, babel-core, etc. depuis votre package.json, puis npm désinstallez-les.

0
Qiulang