web-dev-qa-db-fra.com

Comment utiliser babel-runtime dans Babel 6?

J'essaie de créer un module npm et je ne trouve aucune instruction sur le site officiel de babeljs. Comment utilisez-vous le package babel-runtime? Du nom, je suppose qu'il devrait être placé dans la section "dépendances" de package.json, non?

Absolument aucune information ici: https://github.com/babel/babel/tree/master/packages/babel-runtime

J'ai trouvé un exemple ici: https://strongloop.com/strongblog/javascript-babel-future/ mais quand j'exécute "babel -h", il ne répertorie pas --optional comme paramètre valide.

25
cosmosb

Le runtime est facultatif, mais comme tout le reste dans Babel 6, il est principalement activé en ajoutant un plugin. Dans ce cas, vous avez besoin de http://babeljs.io/docs/plugins/transform-runtime/

plugins: ["transform-runtime"]
  • babel-runtime est un paquet qui contient un polyfill et bien d'autres choses que Babel peut référencer. Vous l'installeriez dans votre application avec npm install babel-runtime
  • transform-runtime est un plugin Babel pour traiter votre code source et injecter import foo from "babel-runtime" instructions afin que babel-runtime est réellement utilisé. Vous devez également l'installer avec npm install babel-plugin-transform-runtime.
7
loganfsmyth

Raisonnement

Lors du transpilage de votre code, Babel injectera en fait des aides pour émuler des fonctionnalités non prises en charge par la version ES que vous ciblez.

Par exemple: class MyClass {} exploite l'aide en ligne _classCallCheck, Qui est également accessible via require('babel-runtime/helpers/classCallCheck').

Par défaut, ces assistants ne sont pas partagés entre les unités de compilation (les fichiers). L'équipe de Babel pourrait cependant être intéressante à les factoriser en un seul endroit, permettant ainsi de gagner de la place lors de plusieurs utilisations.

Ce problème a été résolu en créant le plugin babel-plugin-transform-runtime, Qui parcourt les AST et remplace les injections des assistants par les exigences appropriées du module babel-runtime. De cette façon les aides sont partagées à travers la base de code et la duplication est évitée.

Comment l'utiliser

En supposant que vous ayez un exécutant l'environnement Babel :

  1. Installez babel-plugin-transform-runtime (en tant que devDependency), qui transforme votre code pour supprimer les assistants et utilise ceux de babel-runtime. Vous devez l'ajouter au tableau plugins de votre configuration Babel
  2. Installez babel-runtime (en tant que dependency), qui est la bibliothèque réelle babel-plugin-transform-runtime Suppose que vous allez avoir dans votre dependencies , il sera utilisé par votre code transpilé lors de l'exécution. Vous n'avez pas besoin de l'exiger n'importe où dans votre code.

Extrait minimal

  • npm run build Compile le dossier lib dans dist
  • npm start Démarre le dossier dist (qui dépend de babel-runtime)

package.json

{
  "scripts": {
    "build": "babel lib --out-dir=dist",
    "start": "node dist"
  },
  "dependencies": {
    "babel-runtime": "^6.9.2"
  },
  "devDependencies": {
    "babel-cli": "^6.10.1",
    "babel-plugin-transform-runtime": "^6.9.0"
  },
  "babel": {
    "plugins": [
      "transform-runtime"
    ]
  }
}
39
aymericbeaumet