babel实践
现在的主流浏览器还没有完全兼容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实践的更多相关文章
- babel 实践
一.@babel/core var babel = require("@babel/core");babel.transform(code, options, function(e ...
- react项目实践——(3)babel
1. babel Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行. (1)安装 npm install --save-dev babel-core babel-e ...
- vue2.0 开发实践总结之入门篇
vue2.0 据说也出了很久了,博主终于操了一次实刀. 整体项目采用 vue + vue-router + vuex (传说中的vue 全家桶 ),构建工具使用尤大大推出的vue-cli 后续文 ...
- avalon2的后端渲染实践
avalon2为了提高性能,采用全新的架构,四层架构,其中一层为虚拟DOM. 虚拟DOM的一个好处是能大大提高性能,另一个好处是能过错整描述我们的页面结构.因此在非浏览器环境下,虚拟DOM也能正常运行 ...
- 深入浅出ES6(九):学习Babel和Broccoli,马上就用ES6
作者 Jason Orendorff github主页 https://github.com/jorendorff 现在,我们将向你分步展示如何做到的这一切.上面提及的工具被称为转译器,你可以将它 ...
- [转] Node.js 服务端实践之 GraphQL 初探
https://medium.com/the-graphqlhub/your-first-graphql-server-3c766ab4f0a2#.n88wyan4e 0.问题来了 DT 时代,各种业 ...
- 基于 koajs 的前后端分离实践
一.什么是前后端分离? 前后端分离的概念和优势在这里不再赘述,有兴趣的同学可以看各个前辈们一系列总结和讨论: 系列文章:前后端分离的思考与实践(1-6) slider: 淘宝前后端分离实践 知乎提问: ...
- 在React+Babel+Webpack环境中使用ESLint
ESLint是js中目前比较流行的插件化的静态代码检测工具.通过使用它可以保证高质量的代码,尽量减少和提早发现一些错误.使用eslint可以在工程中保证一致的代码风格,特别是当工程变得越来越大.越来越 ...
- ES6核心内容精讲--快速实践ES6(一)
前言 本文大量参考了阮一峰老师的开源教程ECMAScript6入门,适合新手入门或者对ES6常用知识点进行全面回顾,目标是以较少的篇幅涵盖ES6及部分ES7在实践中的绝大多数使用场景.更全面.更深入的 ...
随机推荐
- spark 机器学习 朴素贝叶斯 原理(一)
朴素贝叶斯算法仍然是流行的挖掘算法之一,该算法是有监督的学习算法,解决的是分类问题,如客户是否流失.是否值得投资.信用等级评定等多分类问题.该算法的优点在于简单易懂.学习效率高.在某些领域的分类问题中 ...
- Django学习:ORM
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- NOIp2005 过河【dp+离散化】By cellur925
题目传送门 $30pts$ 状态和转移都比较好想:设$f[i]$表示跳到$i$位置,踩到的最小石子数.转移方程也很明了,为$f[i]$=$min${$f[i-j]$),,这个位置有石子时答案再加1,$ ...
- hdu1863 畅通工程 基础最小生成树
#include <iostream> #include <cstdio> #include <algorithm> #define N 110 #define M ...
- IE下png图片黑边问题
png图片在ie8下有黑色边框的情况想必大家都有遇到过吧,那么该怎么解决呢?其实很简单,下面的方法或许对大家有所帮助 background-image:url(******.png)!importan ...
- URAL 1890 . Money out of Thin Air (dfs序hash + 线段树)
题目链接: URAL 1890 . Money out of Thin Air 题目描述: 给出一个公司里面上司和下级的附属关系,还有每一个人的工资,然后有两种询问: 1:employee x y z ...
- Random Query CodeForces - 846F
题目 翻译: 给出一个n个数字的数列a[1],...,a[n],f(l,r)表示使a[l],a[l+1],...,a[r]组成的新序列中的重复元素只保留一个后,剩下元素的数量(如果l>r,则在计 ...
- 福建工程学院第七届ACM程序设计新生赛 (同步赛)
A.关电脑 #include<bits/stdc++.h> using namespace std; typedef long long LL; int T,h1,m1,s1,h2,m2, ...
- C. Tennis Championship dp递推 || 找规律
http://codeforces.com/contest/735/problem/C C. Tennis Championship time limit per test 2 seconds mem ...
- [转]浅谈.NET下的多线程和并行计算(二)线程基本知识
本文转自:http://www.cnblogs.com/lovecindywang/archive/2009/12/25/1632213.html 首先来看看如何创建线程: Console.Write ...