59 votes

babel vs babel-core vs babel-loader vs babel-preset-2015 vs babel-preset-react vs babel-polyfill

Je configurais Webpack pour mon projet React et je me suis embrouillé entre babel , babel-core , babel-loader , babel-preset-2015 et babel-preset-react . Je sais que Babel est nécessaire pour transformer du code ES7 ou ES6 en ES5, mais dans mon package.json J'ai installé toutes ces dépendances, à l'exception de Babel, et elles aussi comme devDependencies .

Quelqu'un peut-il m'expliquer quelle est la différence entre tous ces éléments et pourquoi ils sont tous nécessaires à mon projet ? N'y a-t-il pas une seule dépendance pour les remplacer toutes ? Et si elles sont si importantes, pourquoi sont-elles incluses en tant que devDependencies ?

94voto

Jayavel Points 2147

babel

Babel doesn't do anything,It basically acts like const babel = code => code; 
by parsing the code and then generating the same code back out again.

You will need to add some plugins for Babel to do anything like transpiling es6,JSX.

babel-core

if you want to use babel in your real project, you need to install babel but 
there's no babel package available.

   babel split it up into two separate packages: babel-cli and babel-core

   **babel-cli** : which can be used to compile files from the command line.

   **babel-core** : if you want to use the Node API you can install babel-
      core, Same as "babel-cli" except you would use it programmatically inside your app.

   use "babel-cli" or "babel-core" to compile your files before production.

avant de passer à autre chose,

préréglage ou plugin :

We can add features(es6,JSX) one at a time with babel plugins(es2015), 
    or 
we can use babel presets to include all the features(es6) of a particular year.

Presets make setup easier.

babel-preset-es2015

babel-preset-env supports es2015 features and replaces es2015, es2016, 
  es2017 and latest.

So use babel-preset-env, it behaves exactly the same as babel-preset-latest 
 (or babel-preset-es2015, babel-preset-es2016, and babel-preset-es2017 together).

babel-preset-react

transform JSX into createElement calls like transforming react pure class to 
   function and transform react remove prop-types.

babel-polyfill

Without babel-polyfill, babel only allows you to use features like arrow 
 functions, destructuring, default arguments, and other syntax-specific 
 features introduced in ES6.

The new ES6 built-ins like Set, Map and Promise must be polyfilled

To include the polyfill you need to require it at the top of the entry point 
  to your application. 

babel-loader

you done with babel-core, babel-cli, and why need preset, plugins and now 
  you are compiling ES6 to ES5 on a file-by-file basis by babel-cli every time.

to get rid-off this, you need to bundle the task/js file. For that you need 
   Webpack.

Loaders are kind of like “tasks”, They gives the ability to leverage 
 webpack's bundling capabilities for all kinds of files by converting them 
 to valid modules that webpack can process.

Webpack has great Babel support through babel-loader

devDependencies

When you deploy your app, modules in dependencies need to be installed or 
your app won't work. Modules in devDependencies don't need to be installed 
on the production server since you're not developing on that machine.

These packages are only needed for development and testing.

N'y a-t-il pas une dépendance unique pour les remplacer toutes ?

as you read the above states, You need some presets and loaders to transpile 
 es2015 or JSX files.

babel -> @babel

Since Babel 7 the Babel team switched to scoped packages, so you now 
have to use @babel/core instead of babel-core.

Your dependencies will need to be modified like so:

babel-cli -> @babel/cli. Ex:  babel- with @babel/.

7 votes

Mais cela ne répond toujours pas à la différence entre @babel/core et babe-core. Deux paquets différents. De plus, Babel a maintenant déprécié les présélections de scènes : babeljs.io/blog/2018/07/27/removing-babels-stage-presets (en anglais)

0 votes

Je sais ! Quelle est la différence ? Personne n'en parle !

0 votes

Il semble que babel-core est plus ancien (peut-être déprécié) et @babel/core est nouveau. Voir : v7.x babeljs.io/docs/en/babel-core vs v6.x babeljs.io/docs/fr/6.26.3/babel-core En général, ils semblent avoir tout déplacé vers les @babel/ format.

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