首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >babel vs babel-core vs babel-loader vs babel-preset-2015 vs babel-preset-react vs babel-polyfill

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

Stack Overflow用户
提问于 2017-12-09 03:44:34
回答 1查看 9.5K关注 0票数 54

我在为我的React项目设置Webpack时,对babelbabel-corebabel-loaderbabel-preset-2015babel-preset-react感到困惑。我知道将ES7或ES6代码转换为ES5需要Babel,但在我的package.json中,除了Babel之外,我已经安装了所有这些依赖项,它们也作为devDependencies安装。

有没有人能解释一下所有这些之间的区别,为什么我的项目都需要它们?难道没有任何单一的依赖来替换它们吗?如果它们如此重要,为什么要包含在devDependencies中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-30 16:15:56

babel

代码语言:javascript
复制
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-核心

代码语言:javascript
复制
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.

在继续之前,

预设与插件

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
transform JSX into createElement calls like transforming react pure class to 
   function and transform react remove prop-types.

babel-polyfill

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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.

难道没有任何单一的依赖来替换它们吗?

代码语言:javascript
复制
as you read the above states, You need some presets and loaders to transpile 
 es2015 or JSX files.

邮箱:babel -> @babel

代码语言:javascript
复制
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/.
票数 84
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47721169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档