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

使用gulp+babel搭建ES6环境 html

前言

咱们查阅资料能够知道ECMAScript 2015(简称ES6)已经于2015年发布,因为用户使用的浏览器版本在安装的时候可能早于ES6的发布,而到了今天,咱们在编程中若是使用了ES6的新特性,浏览器又没有同步更新版本,或者是新版本的浏览器没有对ES6的特性进行兼容,那浏览器确定是没法识别咱们所写的ES6代码,因此假如想直接编写ES6代码在浏览器执行,结果因为兼容性问题只能是报错。那么浏览器不支持,而咱们又想用ES6语法编写JS代码怎么办,针对这个问题,不少团队为此开发出了不少语法解析转换工具,比较通用的工具备babel, jsx, traceur, es6-shim等,它们的做用就是将咱们编写的ES6代码转换为浏览器识别得了的JS代码,至关于ES6和浏览器之间的翻译官。前端

进入正题es6

在这里默认你已经熟悉了gulp的语法和用法了,不熟悉的童鞋请移步gulp中文网。

建立工程目录

myProject/
├── app/
│   ├── static/
│   │      └── scripts/
│   │               └─ index.js
│   └── views/
│            └─ index.html
│
└── dist/

初始化npm

初始化npm,是由于gulp的运行是基于NodeJS的,执行gulp命令也是须要安装相对应的模块,因此先用终端进入myProject,而后执行npm init命令,不断回车使其生成package.json。npm

安装gulp和编译ES6所须要的模块

用终端进入myProject,分别执行:编程

// 既然要使用gulp自动化工具,固然少不了gulp插件的安装
1. npm install gulp —save-dev;
// 要想将ES6转换为可执行的JS代码,须要babel转换工具,同时又依赖在gulp环境下运行,因此要安装gulp-babel插件
2. npm install gulp-babel —save-dev;
// babel-preset-env插件,该插件能够根据配置的目标运行环境自动启用须要的babel插件(即动态转换ES6代码至可执行的JS代码)
3. npm install babel-preset-env —save-dev;
// 根据babel文档指引是不须要babel-core的,可是在实际操做中少了babel-core会报找不到该模块,因此安装上便可
4. npm install babel-core —save-dev;
//选装,不是转译ES6必备的插件,只是起到压缩的做用
5. npm install gulp-uglify —save-dev;

上面的五行命令能够缩写为 npm install gulp gulp-babel babel-preset-env babel-core gulp-uglify —save-dev 一行代码输出,接下来就让它去自动安装好了,安装完后package.json的内容以下:json

{
  "name": "myproject",
  "version": "1.0.0",
  "description": "",
  "main": "gulpfile.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Kevin",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-preset-env": "^1.6.1",
    "gulp": "^3.9.1",
    "gulp-babel": "^7.0.0",
    "gulp-uglify": "^3.0.0"
  }
}

构建Gulp任务

在myProject目录下新建gulpfile.js和.babelrc(注意开头有个.)文件。
gulp的在运行时会在项目目录下寻找gulpfile.js文件,找不到会报错
同理,babel编译ES6也会相应去找项目目录下寻找.babelrc文件,找不到一样会报错
在gulpfile.js的内容以下:gulp

var gulp = require('gulp'),
    babel = require('gulp-babel'),
    uglify = require('gulp-uglify');


//建立一个名为js的任务
gulp.task('js', function(){
    // 首先取得app/static/scripts下的全部为.js的文件(**/的意思是包含全部子文件夹)
    return gulp.src('app/static/scripts/**/*.js')
        //将ES6代码转译为可执行的JS代码
        .pipe(babel())
        //js压缩
        .pipe(uglify())
        //将转译压缩后的文件输出到dist/static/scripts下(假如没有dist目录则自动生成dist目录)
        .pipe(gulp.dest('dist/static/scripts'))
})

//建立一个名为default的任务(上面的任务均可以没有,可是这个任务必须有,否则在终端执行gulp命令会报错)
//在终端上输入gulp命令,会默认执行default任务,并执行js任务
gulp.task('default', ['js']);

.babelrc的内容以下:segmentfault

{
    "presets": ["env"]
}

最后

在终端上进入myProject目录,执行gulp命令,会生成一个dist目录,里面会有一个编译好的JS文件,在html里面引入编译好的文件,而后就能够像平时那样玩耍了。浏览器

更齐全的gulp自动化配置方案请参考《使用Gulp构建前端自动化方案》
有什么问题能够留言,看到会回复。谢谢收看。babel

相关文章
相关标签/搜索