Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I was setting up Webpack for my React project and got confused between babel, babel-core, babel-loader, babel-preset-2015 and babel-preset-react. I know that Babel is needed to transform ES7 or ES6 code to ES5 but in my package.json I have installed all these dependencies except Babel and they also as devDependencies.

Can someone please explain what's the difference between all these and why all of them are needed for my project? Isn't there any single dependency to replace them all? And if they are so important, why are they included as devDependencies?

like image 865
ankita.gulati Avatar asked Dec 08 '17 19:12

ankita.gulati


People also ask

What is Babel preset ENV used for?

@babel/preset-env is a smart preset that allows you to use the latest JavaScript without needing to micromanage which syntax transforms (and optionally, browser polyfills) are needed by your target environment(s). This both makes your life easier and JavaScript bundles smaller!

What does Babel preset react do?

In Babel, a preset is a set of plugins used to support particular language features. The two presets Babel uses by default: es2015 : Adds support for ES2015 (or ES6) JavaScript. react : Adds support for JSX.

What is Babel core used for?

Babel is a JavaScript compiler Babel is a toolchain that is mainly used to convert ECMAScript 2015+ code into a backwards compatible version of JavaScript in current and older browsers or environments.

Is Babel required for react?

If you work on a React project, chances are you have to deal with Babel. It is needed for 2 main tasks: To compile JSX into React. createElement API calls.


1 Answers

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. 

before move on,

preset vs 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. 

Isn't there any single dependency to replace them all?

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/. 
like image 195
Jayavel Avatar answered Sep 21 '22 14:09

Jayavel