详解javascript中的babel到底是什么


Posted in Javascript onJune 21, 2018

javascript在不断的发展,各种新的标准和提案层出不穷,但是由于浏览器的多样性,导致可能几年之内都无法广泛普及,babel可以让你提前使用这些语言特性,他是一种用途很多的javascript编译器,他把最新版的javascript编译成当下可以执行的版本,简言之,利用babel就可以让我们在当前的项目中随意的使用这些新最新的es6,甚至es7的语法。说白了就是把各种javascript千奇百怪的语言统统专为浏览器可以认识的语言。

新建项目:npm init

安装babel-cli:npm i babel-cli --save-dev

新建一个文件index.js

let numbers = [1,2,3];
let dou = numbers.map((number)=>number*2);
console.log(dou);

这是es6最新的语法,map遍历数组并输出

然后用babel来编译这段代码,不编译,直接运行,可能会报错,编译成标准的js语言compiled.js

babel index.js -o compiled.js

项目中自动生成compiled.js

打开compiled.js 文件,发现并没有起作用,相当于复制过来了,其实我们在在用babel的时候是需要配置文件泪完成编译的,

新建配置.babelrc文件

{
  "plugins":[ ],
  "presets":[ ]
}

下面来一个预设,它可以把es6的代码编译为es5

npm i babel-preset-es2015 --save-dev

安装完后把这插件配置到.babelrc文件

{
  "plugins":[ ],
  "presets":["es2015"]
}

再次运行编译

打开compiled.js文件

变了

var numbers = [1, 2, 3];
var dou = numbers.map(function (number) {
 return number * 2;
});
console.log(dou);

接下来在编译一段es7的代码,es7编译为es5

我们需要一个插件来完成

npm i babel-plugin-transform-object-rest-spread --save-dev

然后把这个插件配置到.babelrc文件中去

{
  "plugins":["transform-object-rest-spread"],
  "presets":["es2015"]
}
let mike = {name:'mike',age:40};
mike={...mike,sex:'男'};
console.log(mike);

然后运行编译命令

打开compiled.js

'use strict';

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };


var mike = { name: 'mike', age: 40 };
mike = _extends({}, mike, { sex: '男' });
console.log(mike);

这个插件启示就是添加了一个_extends方法来完成这个功能

总结:

babel的核心概念就是利用一系列的plugin来管理编译案列,通过不同的plugin,他不仅可以编译es6的代码,还可以编译react JSX语法或者别的语法,甚至可以使用还在提案阶段的es7的一些特性,这就足以看出她的可扩展性。在以后的博客,会介绍他和webpack,react如何共同创建一个完美的开发环境。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中的异常捕捉介绍
Dec 31 Javascript
javascript实现滑动解锁功能
Dec 31 Javascript
详解JavaScript的回调函数
Nov 20 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
Aug 29 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
Jan 08 Javascript
原生JS实现导航下拉菜单效果
Nov 25 Javascript
vue监听对象及对象属性问题
Aug 20 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
May 06 Javascript
JS删除String里某个字符的方法
Jan 06 Javascript
vue获取验证码倒计时组件
Aug 26 Javascript
jQuery实现简单聊天室
Feb 08 jQuery
解决nuxt 自定义全局方法,全局属性,全局变量的问题
Nov 05 Javascript
webpack打包react项目的实现方法
Jun 21 #Javascript
Vue Router的懒加载路径的解决方法
Jun 21 #Javascript
详解如何使用webpack打包JS
Jun 21 #Javascript
vue自定义一个v-model的实现代码
Jun 21 #Javascript
JS实现模糊查询带下拉匹配效果
Jun 21 #Javascript
浅析Vue 生命周期
Jun 21 #Javascript
vue数组对象排序的实现代码
Jun 20 #Javascript
You might like
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
极典R601SW收音机
2021/03/02 无线电
多数据表共用一个页的新闻发布
2006/10/09 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
js style动态设置table高度
2014/10/21 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
Python探索之pLSA实现代码
2017/10/25 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
python的debug实用工具 pdb详解
2019/07/12 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
Python实现一个论文下载器的过程
2021/01/18 Python
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
高校自主招生自荐信
2013/12/09 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
2014标准社保办理委托书
2014/10/06 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
专家推荐信怎么写
2015/03/25 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书
Redis如何实现分布式锁
2021/08/23 Redis
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang