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"
}
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é.
TL; DR Les choses à comparer ici sont:
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.
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.