ES6部分功能没有支持,所以想学习ES6,得先有个转换器,就是将ES6的代码转换为ES5。

我这里用的是Gulp + Bable的形式来将ES6转换为ES5的。

前提:

  (1)、Gulp和Bable都是基于node环境,如果不知道node,建议先看看”初探nodeJS”

  (2)、说到Gulp,如果你还不是很清楚的话,建议先了解Gulp(”细说Gulp”)。

OK,从无到有。接下来,我们就一步步搭建这个‘转换神器’吧。

Get started

因为是Gulp + Bable的形式,所以得先安装gulp和Bable模块。借助npm轻松搞定。

不过为了今后便于查看Gulp安装的相关信息,我们可以在项目根路劲中建立一个package.json文件,里面的内容如下:

--name--:项目名称(自己取,如上的"gulpPro")

--devDependencies--:用于记录项目依赖模块。

好了,下面开始安装吧。

1、  安装项目中的Gulp

   npm install --save-dev gulp

2、  安装Gulp上的Bable插件

   npm install --save-dev gulp-babel

3、  安装ES6转换ES5插件

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

好了,模块安装完后,我们再打开刚才我们创建的package.json文件,如下:

可以清晰地在devDpendencies中,看到我们刚才安装的模块依赖。

接下来,配置gulpfile.js的步骤就跟”细说Gulp”中的”小试牛刀之压缩Javascript”思路差不多。这里我们就依葫芦画瓢,得如下配置内容:

//引入gulp模块
var gulp = require('gulp');
//引入gulp-babel模块,用于转换ES6为ES5
var babel = require('gulp-babel');
//默认任务
gulp.task('default', function(){
//这里是将script文件下的js转换为ES5,并添加到dist文件夹中
gulp.src('script/*.js')
.pipe(babel())
.pipe(gulp.dest('dist'));
});

最后,我们再在根路径下新建一个.babelrc文件,内容如下:

因为我是以D盘的ES6文件夹作为的根路径,所以经过上面的步骤,ES6文件夹下现在是这样的:

好了,再在根路径下创建一个script文件夹,里面新建一个demo.js用于检验,配置是否成功。

demo.js里的内容为:

//直接在参数里赋值,属于ES6的规范,如y='world'
function log(x, y = 'world'){
console.log(x, y);
};
log('hello');

在cmd环境(D:\ES6下)输入gulp + 回车,运行。

如下:

这样就成功啦。你会发现在根路径下多了一个dist文件夹,里面还多了一个demo.js。

不错,这个js文件,就是转换为ES5的结果。

如下:

有了这个神器,我们就可以学习ES6咯。

但,为了让我们学习ES6时,效率更高,我们再来完善一下gulpfile.js里的配置内容。

因为,我们在学习ES6时,难免会发生语法之类的错误,当我们利用gulp去转换时,一旦遇见错误,就会报错且停止运行gulp。且,gulp自身报的错,无关紧要,在实际操作中,根本不知道这个错误是什么,非常影响效率。

So,我们可以利用stream-combiner2来解决这一问题。当gulp遇见错误时,利用stream-combiner2来捕获错误信息,并准确地告诉我们错误在哪。这样不就提高效率了么?

如下:

//引入gulp模块
var gulp = require('gulp');
//引入gulp-babel模块,用于转换ES6为ES5
var babel = require('gulp-babel');
//引入stream-combiner2捕获错误信息
var combiner = require('stream-combiner2');
//捕捉异常函数
var handleError = function(err){
console.log('\n');
console.log('Error!');
console.log('fileName: ' + err.fileName);
console.log('lineNumber: ' + err.loc.line);
console.log('message: ' + err.message);
console.log('plugin: ' + err.plugin);
console.log('\n');
};
//默认任务
gulp.task('default', function(){
//这里是将script文件下的js转换为ES5,并添加到dist文件夹中
var combined = combiner.obj([
gulp.src('script/*.js'),
babel(),
gulp.dest('dist')
]);
//利用combined捕获异常
combined.on('error', handleError);
});

entirCode

测试:倘若我们将script/demo.js改为如下这样,并取名为demo1.js:

因为我们引入了stream-combiner2模块,所以你得安装它

(npm install --save-dev stream-combiner2)

安装完成后,运行gulp,得如下结果:

Nice。出现问题不但没有终止gulp,且在最后,打印出了具体错误信息,这样我们检测错误就非常方便啦。

但是,这是在测试代码较少的情况下,如果代码数量很多呢?这字体不便于我们发现哦。所以为了更加完美,提高学习效率,我们可以利用gulp-util模块来指定字体颜色。这样,当出错信息我们标记为红色,不就显而易见了么?

修改代码如下:

//引入gulp模块
var gulp = require('gulp');
//引入gulp-babel模块,用于转换ES6为ES5
var babel = require('gulp-babel');
//引入stream-combiner2捕获错误信息
var combiner = require('stream-combiner2');
//引入gulp-util模块,用于实现自定义颜色的log
var gutil = require('gulp-util');
//捕捉异常
var handleError = function(err){
var colors = gutil.colors;
console.log('\n');
gutil.log(colors.red('Error!'));
gutil.log('fileName: ' + colors.red(err.fileName));
gutil.log('lineNumber: ' + colors.red(err.loc.line));
gutil.log('message: ' + err.message);
gutil.log('plugin: ' + colors.yellow(err.plugin));
};
//默认任务
gulp.task('default', function(){
//这里是将script文件下的js转换为ES5,并添加到dist文件夹中
/*
gulp.src('script/*.js')
.pipe(babel())
.pipe(gulp.dest('dist'));
*/
var combined = combiner.obj([
gulp.src('script/*.js'),
babel(),
gulp.dest('dist')
]);
combined.on('error', handleError);
});

entireCode

引入了gulp-util模块,所以你得安装它(npm install --save-dev gulp-util)

安装好后,再次运行gulp。

得如下结果:

好了,完美程度直逼100%。

为了更加完美,不用我们每次都手动去转换ES6,我们可以利用gulp-watch-path模块去监听文件,一旦文件变换,就转换。注:引入了gulp-watch-path模块,所以你得安装!!

如下:

//引入gulp模块
var gulp = require('gulp');
//引入gulp-babel模块,用于转换ES6为ES5
var babel = require('gulp-babel');
//引入stream-combiner2捕获错误信息
var combiner = require('stream-combiner2');
//引入gulp-util模块,用于实现自定义颜色的log
var gutil = require('gulp-util');
//引入gulp-watch-path模块,用于监听
var watchPath = require('gulp-watch-path');
//捕捉异常
var handleError = function(err){
var colors = gutil.colors;
console.log('\n');
gutil.log(colors.red('Error!'));
gutil.log('fileName: ' + colors.red(err.fileName));
gutil.log('lineNumber: ' + colors.red(err.loc.line));
gutil.log('message: ' + err.message);
gutil.log('plugin: ' + colors.yellow(err.plugin));
};
//默认任务
gulp.task('default', function(){
gulp.watch('script/*.js', function(event){
var paths = watchPath(event, 'script/', 'dist/');
var combined = combiner.obj([
gulp.src(paths.srcPath),
babel(),
gulp.dest(paths.distDir)
]);
combined.on('error', handleError);
});
});

entireCode

ES6转换器之Babel的更多相关文章

  1. Babel 转码器 § es6转换es5

    Babel 转码器 § es6转换es5 实时转码 /  Repl  -babel-node / babel-register(自动转码引入babel-register模块) 配置文件.babelrc ...

  2. 用grunt进行ES6转换,再用uglify压缩所有js实例

    1.首先安装node.js 去官网下载exe执行文件安装即可,安装完成后自带有npm管理. 2.安装grunt CLI 在项目根文件夹下执行如下代码: npm install -g grunt-cli ...

  3. 让浏览器兼容ES6语法(gulp+babel)

    使用gulp+babel搭建ES6环境 前言 我们查阅资料可以知道ECMAScript 2015(简称ES6)已经于2015年发布,由于用户使用的浏览器版本在安装的时候可能早于ES6的发布,而到了今天 ...

  4. ES6学习之Babel的正确安装姿势

    开始学习ES6,写点东西放上博客^_^ 本文介绍Babel6.x的安装过程~ 首先呢,可以使用Babel在线转换 https://babeljs.io/repl/ 然后进入主题:安装Babel(命令行 ...

  5. ES6入门一:ES6简介及Babel转码器

    ES6简介 Babel转码器 Nodejs中使用ES6 WebPack中使用ES6及Babel转码插件 一.ES6简介与转码  1.1一个常见的问题,ECMAScript和JavaScript到底是什 ...

  6. webpack4 es6转换

    在webpack里用es6语法, ie浏览器不识别,为了让浏览器识别,需要用到bebal转换; bebal,英文是通天塔 的意思, 我们常说的巴比伦也是这个词;我估计是当初设计者是想用它作为一个沟通e ...

  7. ES6转换ES5

    各大浏览器的最新版本,对 ES6 的支持可以查看kangax.github.io/es5-compat-table/es6/.随着时间的推移,支持度已经越来越高了,超过 90%的 ES6 语法特性都实 ...

  8. 让nodeJS支持ES6的词法----babel的安装和使用

    要使用Babel, 我们需要nodeJS的环境和npm, 主要安装了nodeJS, npm就默认安装了 , 现在安装nodeJS很简单了, 直接下载安装就好了: 安装es-checker 在使用Bab ...

  9. ES6 系列之 Babel 是如何编译 Class 的(下)

    前言 ES5 寄生组合式继承 function Parent (name) { this.name = name; } Parent.prototype.getName = function () { ...

随机推荐

  1. 拨开迷雾,找回自我:DDD 应对具体业务场景,Domain Model 到底如何设计?

    写在前面 除了博文内容之外,和 netfocus 兄的讨论,也可以让你学到很多(至少我是这样),不要错过哦. 阅读目录: 迷雾森林 找回自我 开源地址 后记 毫无疑问,领域驱动设计的核心是领域模型,领 ...

  2. WPF 微信 MVVM 【续】发送部分QQ表情

    今天主要记录的就是发送QQ表情, WPF 微信 MVVM里写了,后期为了发送QQ表情,需要把TextBox替换为RichTextBox,接下来就说说替换的过程. 一.支持Binding的RichTex ...

  3. logstash file输入,无输出原因与解决办法

    1.现象 很多同学在用logstash input 为file的时候,经常会出现如下问题:配置文件无误,logstash有时一直停留在等待输入的界面 2.解释 logstash作为日志分析的管道,在实 ...

  4. Java 为值传递而不是引用传递

    ——reference Java is Pass by Value and Not Pass by Reference 其实这个问题是一个非常初级的问题,相关的概念初学者早已掌握,但是时间长了还是容易 ...

  5. 开源一款简单清爽的日历组件,JavaScript版的

    源码会在最后给出地址,需要的朋友自己去下载.最近项目需要做一个日程安排的功能,就是点击日历的某一天弹出一个录入页面,填完信息后保存当天的日程安排.有日程的日期会有不同的标记(比如加一个背景色啥的).网 ...

  6. JDK动态代理

    一.基本概念 1.什么是代理? 在阐述JDK动态代理之前,我们很有必要先来弄明白代理的概念.代理这个词本身并不是计算机专用术语,它是生活中一个常用的概念.这里引用维基百科上的一句话对代理进行定义: A ...

  7. 【夯实PHP基础】nginx php-fpm 输出php错误日志

    本文地址 原文地址 分享提纲: 1.概述 2.解决办法(解决nginx下php-fpm不记录php错误日志) 1. 概述 nginx是一个web服务器,因此nginx的access日志只有对访问页面的 ...

  8. Angular (SPA) WebPack模块化打包、按需加载解决方案完整实现

    文艺小说-?2F,言情小说-?3F,武侠小说-?9F long long ago time-1-1:A 使用工具,long long A ago time-1-2:A 使用分类工具,long long ...

  9. BPM始终服务于人,落脚于人

    数字经济时代下,云计算.大数据.移动互联已经成为当下企业必须采取的武装力量.随着互联网+.中国制造2025.工业4.0等国家战略的引导与支持,无数的企业在这场数字化浪潮中使尽浑身解数,想要抓住机遇奋力 ...

  10. SharePoint 2016 必备组件离线安装介绍

    前言 SharePoint 必备组件安装,一直以来都是SharePoint安装过程中的最大的坑,尤其是不能联网的服务器.博主在这里简单介绍一下离线安装过程,并附组件包下载以及安装命令,并且在windo ...