详解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 相关文章推荐
再谈IE中Flash控件的自动激活 ObjectWrap
Mar 09 Javascript
js判断字符是否是汉字的两种方法小结
Jan 03 Javascript
JavaScript编程的10个实用小技巧
Apr 18 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
Oct 17 Javascript
Js调用Java方法并互相传参的简单实例
Aug 11 Javascript
JavaScript每天必学之基础知识
Sep 17 Javascript
深入学习Bootstrap表单
Dec 13 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
Nov 24 Javascript
jQuery 防止相同的事件快速重复触发方法
Feb 08 jQuery
Mint-UI时间组件起始时间问题及时间插件使用
Aug 20 Javascript
微信小程序后端(java)开发流程的详细步骤
Nov 13 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
Nov 14 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
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
php数据库备份还原类分享
2014/03/20 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
2013/11/05 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
详解重置Django migration的常见方式
2019/02/15 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
Python的in,is和id函数代码实例
2020/04/18 Python
python实现数字炸弹游戏程序
2020/07/17 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
上课看小说检讨书
2014/02/22 职场文书
监督检查工作方案
2014/05/28 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
2014年小学教师工作总结
2014/11/10 职场文书
作弊检讨书范文
2015/05/06 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
海上钢琴师观后感
2015/06/03 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python