详解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 相关文章推荐
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
Mar 05 Javascript
js下判断 iframe 是否加载完成的完美方法
Oct 26 Javascript
js实现延迟加载的方法
Jun 24 Javascript
jquery分割字符串的方法
Jun 24 Javascript
AngularJS  自定义指令详解及实例代码
Sep 14 Javascript
js原生实现FastClick事件的实例
Nov 20 Javascript
深入理解Javascript箭头函数中的this
Feb 13 Javascript
老生常谈js中的MVC
Jul 25 Javascript
Node.js静态服务器的实现方法
Feb 28 Javascript
Angular ElementRef简介及其使用
Oct 01 Javascript
微信小程序使用component自定义toast弹窗效果
Nov 27 Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
May 24 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
php 短链接算法收集与分析
2011/12/30 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
angular异步验证防抖踩坑实录
2019/12/01 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
python判断windows隐藏文件的方法
2014/03/21 Python
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
基于python 处理中文路径的终极解决方法
2018/04/12 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
详解CSS3 用border写 空心三角箭头 (两种写法)
2017/09/29 HTML / CSS
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
公司庆典活动邀请函
2014/01/09 职场文书
超市重阳节活动方案
2014/02/10 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
六一亲子活动感想
2015/08/07 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书
Hive日期格式转换方法总结
2022/06/25 数据库