详解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中类的定义及其方式(《javascript高级程序设计》学习笔记)
Jul 04 Javascript
JavaScript中合并数组的N种方法
Sep 16 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
Jun 24 Javascript
js文字横向滚动特效
Nov 11 Javascript
requireJS使用指南
Apr 27 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
May 24 Javascript
JS实现瀑布流布局
Oct 21 Javascript
微信小程序自定义键盘 内部虚拟支付
Dec 20 Javascript
微信小程序rich-text富文本用法实例分析
May 20 Javascript
对TypeScript库进行单元测试的方法
Jul 18 Javascript
Vue-cli3多页面配置详解
Mar 22 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
用header 发送cookie的php代码
2007/03/16 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
Javascript !!的作用
2008/12/04 Javascript
JavaScript DOM 添加事件
2009/02/14 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
Python实现的微信好友数据分析功能示例
2018/06/21 Python
python实现泊松图像融合
2018/07/26 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
Python读写文件基础知识点
2019/06/10 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
爱国卫生月实施方案
2014/02/21 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
年度考核自我鉴定
2014/03/19 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
法人代表证明书格式
2014/10/01 职场文书
经典导游欢迎词
2015/01/26 职场文书
超市采购员岗位职责
2015/04/07 职场文书
好员工观后感
2015/06/17 职场文书
Python尝试实现蒙特卡罗模拟期权定价
2022/04/21 Python