现在的主流浏览器还没有完全兼容ES6的语法,如ie11就不支持箭头函数。

使用过es6的人都知道,es6更加简洁和强大,可是使用es6写出来的代码并不能得到所有主流js引擎的支持,针对这一点,一个解决方案就是使用babel这个工具。

babel是一个js处理器,可以对js代码进行转换,可以转换jsx、es6代码等。这里我们使用它来把es6代码转为es5代码。

有如下js代码:

let add = item => item + 1
console.log(add(1));

以上代码可以在chrome61 和 node 6.11 下执行,对于ie11,则运行报错。

首先安装babel指令:

npm install -g babel-cli

接着再安装一个我们需要用到的babel转换规则(把js代码转为es5):

npm install --save-dev babel-preset-es2015

通知babel去应用这个规则,我们要在项目的根目录添加一个 .babelrc 文件:

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

以上三个步骤完成后,可以开始进行转换了。执行:

babel -d dist/ index.js

以上会把index.js文件转换的代码存放在当前目录的dist目录下。转换结果:

let add = item => item + 1
console.log(add(1)); // after convert : "use strict"; var add = function add(item) {
return item + 1;
};
console.log(add(1));

转换后的代码可以在ie11中运行了。


以上这个小例子明白后,来看看第二个例子。

class Person {
constructor( name ) {
this.name = name;
}
sayHello() {
return `Hello ${ this.name }!`;
}
sayHelloThreeTimes() {
let hello = this.sayHello();
console.log(`${ hello } `.repeat(3));
}
}
new Person('ben').sayHelloThreeTimes()

  这段代码同样没办法直接在ie11上运行,对这段代码进行类似第一个例子中的转换后,依然无法运行,提示如下:对象不支持“repeat”属性或方法

  这里有很重要的一点值得关注,babel 中的  babel-preset-es2015 这条规则只会转换语法,却不会转换新的api 。而以上的字符串repeat方法是es6新增的api,ie11不支持这个特性,就报错了。

  使浏览器支持新的api。这个需求很常用,通常的解决办法就是使用垫片库(polyfill),而在babel生态里边就有对应的垫片库,叫做babel-polyfill。首先下载:

npm install --save babel-polyfill

  下载好了之后,使用这个垫片库有两种方式:

// 使用方式1:在新api所在的js中引入这个模块,如下:
import 'babel-polyfill'; // 使用方式2:在html的头部引入
<script src="node_modules/babel-polyfill/dist/polyfill.js"></script>

  可以这么理解,只要这个库被引入了,它就会自动往对应对象的原型上添加新api的定义,这样后续你直接在js中使用新的api,也就不会报错了。

虽然以上例子中的代码只有十多行,但是查看编译后的代码,能明显感觉到稍微复杂了一些

对于这样的代码感觉没法调试啊,里面的代码和自己写的代码都不一样的。解决办法是使用sourceMap,这个功能能将原来的代码与编译后的代码进行关联,虽然运行的是编译后的代码,但是里面代码的相对执行次序会反映到原来的代码上。在编译时多加一个参数:

babel -d dist/ index.js --source-maps

重新访问页面,调试窗口多出来一个文件,是可以在里面打断点进行调试的:

里面的代码就是编译前的代码了

babel实践的更多相关文章

  1. babel 实践

    一.@babel/core var babel = require("@babel/core");babel.transform(code, options, function(e ...

  2. react项目实践——(3)babel

    1. babel Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行. (1)安装 npm install --save-dev babel-core babel-e ...

  3. vue2.0 开发实践总结之入门篇

    vue2.0 据说也出了很久了,博主终于操了一次实刀. 整体项目采用  vue +  vue-router +  vuex (传说中的vue 全家桶 ),构建工具使用尤大大推出的vue-cli 后续文 ...

  4. avalon2的后端渲染实践

    avalon2为了提高性能,采用全新的架构,四层架构,其中一层为虚拟DOM. 虚拟DOM的一个好处是能大大提高性能,另一个好处是能过错整描述我们的页面结构.因此在非浏览器环境下,虚拟DOM也能正常运行 ...

  5. 深入浅出ES6(九):学习Babel和Broccoli,马上就用ES6

    作者 Jason Orendorff  github主页  https://github.com/jorendorff 现在,我们将向你分步展示如何做到的这一切.上面提及的工具被称为转译器,你可以将它 ...

  6. [转] Node.js 服务端实践之 GraphQL 初探

    https://medium.com/the-graphqlhub/your-first-graphql-server-3c766ab4f0a2#.n88wyan4e 0.问题来了 DT 时代,各种业 ...

  7. 基于 koajs 的前后端分离实践

    一.什么是前后端分离? 前后端分离的概念和优势在这里不再赘述,有兴趣的同学可以看各个前辈们一系列总结和讨论: 系列文章:前后端分离的思考与实践(1-6) slider: 淘宝前后端分离实践 知乎提问: ...

  8. 在React+Babel+Webpack环境中使用ESLint

    ESLint是js中目前比较流行的插件化的静态代码检测工具.通过使用它可以保证高质量的代码,尽量减少和提早发现一些错误.使用eslint可以在工程中保证一致的代码风格,特别是当工程变得越来越大.越来越 ...

  9. ES6核心内容精讲--快速实践ES6(一)

    前言 本文大量参考了阮一峰老师的开源教程ECMAScript6入门,适合新手入门或者对ES6常用知识点进行全面回顾,目标是以较少的篇幅涵盖ES6及部分ES7在实践中的绝大多数使用场景.更全面.更深入的 ...

随机推荐

  1. 3.bool布尔值int,str的转化,字符串的常用方法,字符串format,is判断(字符串的数字),for循环

    1.bool 布尔值 bool 布尔值 -- 用于条件使用 True 真 False 假 True 真 False 假 print(bool(-10)) # 0 是 False 非0的都是True p ...

  2. LuoguP3964 [TJOI2013]松鼠聚会【切比雪夫距离/前缀和】

    题目传送门 前置知识:切比雪夫距离和曼哈顿距离的相互转化--自为风月马前卒 有了这个知识,我们便可以在读入松鼠的家的坐标时,先把他转化一下,然后把最后的总式化简,我们会得到一个充满后缀和以及前缀和的式 ...

  3. div里面放img

    div里面放img的时候 会出现包裹不住的情况,这个时候 只要将img { width:100%,height:100%  },就可以解决问题了

  4. 正则表达式test报错 is not a function

    var reg = "/^1[34578]\d{9}$/"; //错误格式,这是一个字符串 var reg2 = /^1[34578]\d{9}$/; //正确格式 reg .te ...

  5. K-th Number 线段树的区间第K大

    http://poj.org/problem?id=2104 由于这题的时间限制不紧,所以用线段树水一水. 每个节点保存的是一个数组. 就是对应区间排好序的数组. 建树的时间复杂度需要nlogn 然后 ...

  6. RHEL6.5、RHEL7.2忘记ROOT密码恢复小结

    RHEL6.5忘记root密码恢复步骤 RHEL7.2恢复密码步骤 5.耐心等待重启完成即可实现重置root密码 也可以按如下做法 依次执行chroot /sysroot/,passwd===> ...

  7. json字符串和字典类型的相互转换

    在开发过程中,有时候需要将json字符串转为字典类型,反之亦然,通常采用.Net的开源类库Newtonsoft.Json进行序列化,这里我也是采用这个,不过我更喜欢写扩展方法方便在项目的调用. 首先新 ...

  8. Java多态学习笔记

    面向对象三大特性:封装,继承和多态.其中,封装,继承都比较通俗易懂,唯有多态令我甚是头疼.经过仔细研究之后,终于搞懂了一点,特来做一个分享.独乐乐不如众乐乐. 何为多态?多态的本质是:一个程序中同名的 ...

  9. 如何优化APK的大小

    项目使用AS打出的包明显比Eclipse打出的包要大一些,还是蛮费解.于是百度了一翻, 原来Eclipse使用的proguard能够遍历所有的java代码,把无用的代码去掉才生成dex文件,同 时对r ...

  10. [python3]PyCharm编辑器

    简介 Python有丰富的开发工具,本教程不一一进行介绍,只推荐大家使用PyCharm,因为python开发者都在用它,但缺点就是消耗电脑资源,如果你电脑配置低,就会比较卡 下载 下载地址: http ...