首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >babel入门基础

babel入门基础

作者头像
用户1217459
发布于 2018-01-31 06:26:01
发布于 2018-01-31 06:26:01
98200
代码可运行
举报
文章被收录于专栏:Young DreamerYoung Dreamer
运行总次数:0
代码可运行

背景

babel的官网说babel是下一代的js语法编译器,现在自己也在很多项目中使用了babel,可是自己对babel的认识呢,只停留在从google和别人项目中copy的配置代码上,内心感到很不安,最近花了点时间整理了一下,分享给大伙。

babel常用配置

通常在前端或node项目中,进行以下配置:

入口文件app.babel.js里面配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// babel
require('babel-core/register')({
	presets: ['es2015', 'stage-0']
});
require('babel-polyfill');

require('./app.js');

.babelrc文件中的设置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "presets": ["es2015", "stage-0"]
}

babel基础概念

1.babel-core

  新的js语法之前是不存在的,需要将js代码分析抽象的语法树 ,方便各个插件分析语法进行相应的处理成低版本的js;

 2.babel-register 

  改写了require命令,会对.js、jsx、.es、es6 后缀的模块都会先转码,但并不会对当前文件进行转码;由于该转码是实时的,所以不能用在生产环境中。

3.babelrc文件

  babel-core只是生成了语法树,并没有转码,转码工作由插件完成。自从babel升级到6.x之后,babel的插件都是可以插拔的,只有设置了相应的插件,babel才能知道如何处理js代码。

  .babelrc主要对presets、plugins进行设置,其中presets主要是一套预设置的插件,如es-2015、stage-0等,plugins可以让用户选取需要的单个插件。

  目前babel提供了几个官方的preset,主要包括:env es2015 es2016 es2017 flow latest react 。设置presets的时候需要提前npm安装相应的插件,插件名格式:babel-preset-xxx;如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{   "presets": ["es2015"] }

npm install babel-preset-es2015

  如果不需要一套plugins的预设置,可以通过plugins属性引入所需的plugin,比如以下的设置就会引入编译class函数的功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{   "plugins": ["transform-es2015-classes"] }

  需要注意的是,某些插件是不被presets预置的,如常用的transform-runtime插件和transform-remove-console插件。

关于presets和plugins的优先顺序一般遵从3个原则:

  • plugins优先于presets进行编译。
  • plugins按照数组的index增序(从数组第一个到最后一个)进行编译。
  • presets按照数组的index倒序(从数组最后一个到第一个)进行编译。
  • 详细信息可以查看官方文档

4.babel-polyfill

  polyfill拥有自定义的regenerator runtime 和core-js;它模拟了ES2015的环境,一般使用在应用程序中,而不是当做库和工具使用;比如说babel-node中自带了babel-polyfill,babel-polyfill为node提供了ES6的REPL环境。REPL,即read-eval-print-loop交互式解释器。详情可参考阮老师的文章

  babel几乎能翻译所有的js新语法,但是对于APIs却并非如此,如新增对象Promise、Set、Map等,静态方法Object.assign等,这就需要创造一个ES6的运行环境。

可以通过babel-polyfill来转码新API,其实现办法就是向全局变量上挂新增的对象或在原型链上增加方法,如在node环境下将Promise挂在global对象上。缺点就是污染全局变量。

  还有一个避免全局污染的方法就是使用babel-runtime + babel-plugins-runtime-transform;babel-runtime 更像是分散的polyfill 模块,我们可以在自己的模块里单独引入,比如 require(‘babel-runtime/core-js/promise’) ,它们不会在全局环境添加未实现的方法,只是这样手动引用每个 polyfill 会非常麻烦。我们借助 Runtime transform 插件来自动化处理这一切。

webpack中如何使用babel

1.使用babel-runtime

需要安装babel-runtime和babel-plugin-transform-runtime

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module: {
    loaders: [{
     loader: 'babel',
     test: /\.js/,
     include: path.join(__dirname, 'src'), 
    query: {
       plugins: ['transform-runtime'], 
       presets: [ 'es2015', 'stage-0'],
     }}]
 }

2.使用babel-polyfi

将babel-polyfill放在入口设置处

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
entry: [ 'babel-polyfill','src/index.js', ], 
module: {   
    loaders: [{
         loader: 'babel',
         test: /\.js/,
         include: path.join(__dirname, 'src'),
         query: {
             presets: ['es2015',  'stage-0']
        }}]
 }

参考资料:

http://www.tuicool.com/articles/vmA3U3R

https://segmentfault.com/a/1190000008159877

https://github.com/brunoyang/blog/issues/20

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Babel 入门指南
Babel 入门指南 ​⚠️ 注意: Babel 可以与很多构建工具(如 Browserify、Grunt、Gulp 等)进行集成。由于本教程选择 Webpack ,所以只讲解与 Webpack
静默虚空
2018/01/05
1.7K0
Babel6
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
奋飛
2019/08/15
1.2K0
简单使用babel
要使用babel,首先需要了解用的东西?它是一个用来进行ES6转化到ES5的转码器,从而在现有环境中进行执行。 一、配置文件.babelrc(搬运下) Babel的配置文件是.babelrc,存放在项目的根目录下。使用Babel的第一步,就是配置这个文件。 该文件用来设置转码规则和插件,基本格式如下。 { "presets": [], "plugins": [] } presets字段设定转码规则,官方提供以下的规则集,你可以根据需要安装。 # ES2015转码规则 $ npm install
用户1148881
2018/01/15
8430
Babel是什么?Babel到底可以用来干嘛___一文带你从零开始认识Babel
在此之前或许你已经用过babel,也许听说过什么 babel-loader babel-core、babel-cli、babel-plugin-...、babel-preset-env 反正各种乱七八糟的做项目随便用一一下就可以了,对他只有个一知半解,甚至不知道他到底是干什么的,反正项目要用,照着用就行了,至少博主之前的状态是这样,如果只对他有个一知半解甚至都不了解,那么项目出bug了你都不知道怎么去调试,只能复制-->粘贴-->百度。 基于此,写下自己对Babel的理解。
切图仔
2022/09/08
2.4K0
Babel是什么?Babel到底可以用来干嘛___一文带你从零开始认识Babel
深入了解Babel
Babel 是一个用于 JavaScript 的通用多用途编译器,使用 Babel 可以使用(或创建)下一代 的JavaScript,以及下一代 JavaScript 工具。 作为一门语言,JavaScript 不断发展,带来了很多新的规范和建议,使用 Babel 可以让你在这些新的规范和建议全面普及之前就提前使用它们。 Babel 通过将最新标准的 JavaScript 代码编译为已经在目前可以工作的代码来实现上一段提到的内容。这个过程被称为 “源代码到源代码” 的编译,这也被成为 “转换”。
前端逗逗飞
2021/04/30
7730
大前端的自动化工厂(3)—— babel
babel是ES6+语法的编译器,官方网址:www.babeljs.io,用于将旧版本浏览器无法识别的语法和特性转换成为ES5语法,使代码能够适用更多环境。
大史不说话
2018/09/10
7740
大前端的自动化工厂(3)—— babel
【前端词典】关于 Babel 你必须知道的
我第一次打开搜索引擎查询关于 Babel 的资料时,出现的竟然是关于 Babel 的传说。后来我花了小一天的时间去了解这个传说(来自《旧约圣经》)。
小生方勤
2019/07/23
7080
【前端词典】关于 Babel 你必须知道的
你想知道的关于 Babel 及其相关工具使用都在这里了!
Babel 是一个用于 JavaScript 的通用多用途编译器,使用 Babel 可以使用(或创建)下一代 的JavaScript,以及下一代 JavaScript 工具。
五月君
2021/01/27
1K0
Babel 入门教程
(说明:本文选自我的新书《ES6 标准入门(第二版)》的第一章《ECMAScript 6简介》) Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。 这意味着,你可
ruanyf
2018/04/12
1.1K0
Babel 入门教程
babel实践:真实gulp项目支持ES6转译ES5的跳坑指北
这两天,在对现有项目进行框架优化,由于项目使用gulp+jQuery构建的,不支持ES6规范,不能很好满足越来越复杂的需求场景,尤其是需要多异步任务的情况下,js又要异步又要操作各种DOM状态,状态与状态间也是各种紧耦合,单纯使用es5和jQuery,已经开始影响开发效率了。
前端_AWhile
2019/08/29
2K0
babel实践:真实gulp项目支持ES6转译ES5的跳坑指北
搞懂babel7常用的配置和优化,这篇就够了!
网上关于babel7的文章很多,但是大多都没有实践,很多讲的模棱两可。 本文将手把手的带你看各种配置下的输入输出转换,彻底让你了解babel7到底该怎么去配置和优化。
ssh_晨曦时梦见兮
2024/01/27
4500
babel ES6 转换 ES5 实现原理
前面写过一篇简单的 AST 抽象语法树的文章简述 AST 抽象语法树。今天来看一下在 babel 中是如何将 ES6 转换为 ES5 的 。
用户10106350
2022/10/28
9020
从0到1搭建webpack2+vue2自定义模板详细教程
webpack2和vue2已经不是新鲜东西了,满大街的文章在讲解webpack和vue,但是很多内容写的不是很详细,对于很多个性化配置还是需要自己过一遍文档。Vue官方提供了多个vue-templates,基于vue-cli用的最多,不过对于很多人来说,vue-cli 的配置还是过于复杂,对于我们了解细节实现不是很好,所以想自己从零开始搭建一个模板工程,也顺便重新认识一下webpack和vue工程化。
青梅煮码
2023/03/02
5.2K0
搞懂babel7常用的配置和优化,这篇就够了!
网上关于babel7的文章很多,但是大多都没有实践,很多讲的模棱两可。 本文将手把手的带你看各种配置下的输入输出转换,彻底让你了解babel7到底该怎么去配置和优化。
ssh_晨曦时梦见兮
2020/04/10
3K0
入门babel,我们需要了解些什么
说实话,我从工作开始就一直在接触babel,然而对于babel并没有一个清晰的认识,只知道babel是用于编译javascript,让开发者能使用超前的ES6+语法进行开发。自己配置babel的时候,总是遇到很多困惑,下面我就以babel@7为例,重新简单认识下babel。
程序员白彬
2020/07/10
8060
入门babel,我们需要了解些什么
前端工程师的自我修养-关于 Babel 那些事儿
随着 Nodejs 的崛起,编译这个昔日在 Java、C++ 等语言中流行的词,在前端也逐渐火了起来,现在一个前端项目在开发过程中没有编译环节,总感觉这个项目是没有灵魂的。说起前端编译就不得不提前端编译界的扛把子 Babel ,大部分前端攻城狮对 Babel 并不陌生,但是在这个 Ctrl+C 和 Ctrl+V 的年代,大多数人对它也只是知道、了解或者听过,少数可能配置过 Babel,但也仅此而已。作为一个有想法和灵魂的前端攻城狮仅仅知道这些是不够的,你需要对 Babel 有一个系统的了解,今天就来聊聊 Babel 那些事儿。
政采云前端团队
2020/03/10
9960
前端工程师的自我修养-关于 Babel 那些事儿
Babel有关基础内容
项目中babel的设置一团遭,确实有必要搞懂这个babel。有的项目中直接在配置文件.babelrc中配置好,有的在main.js中全局import 这个polyfill,有的是在webpack中配置,有的引入了大量的第三方babel插件,这样可不行啊,如果不对babel有个全面的认知,在面对这些一系列满眼的配置下去修改,就有点力不从心。 本文,抽丝剥茧,彻底的搞懂babel,并测试、去实践修改babe的配置。
六个周
2022/10/28
5460
Babel有关基础内容
babel
本文主要介绍了 Babel 这个 JavaScript 引擎在 Web 浏览器中如何实现 ES6 转 ES5 的编译工作,同时介绍了该引擎的一些配置和用法。
IMWeb前端团队
2018/01/08
9720
从零学脚手架(四)---babel
这是因为webpack本身不会处理代码中的ES6(ES2015+)特性,所以也就没有使用。
莫问今朝
2021/03/16
1.4K0
从零学脚手架(四)---babel
React中static defaultProps报错问题详解
在react中可以定义默认props,使用es5时,可以使用getDefaultProps:
李维亮
2021/07/09
6980
相关推荐
Babel 入门指南
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验