古语有云:“君子生非异也,善假于物;工欲善其事,必先利其器。”javascript
因为有些低版本的浏览器仍是不支持ES6语法,学习ES6,首先要学会搭建一个基本的ES6开发环境,利用工具,把ES6的语法转变成ES5的语法。
一、使用Babel把ES6编译成ES5java
1.1 创建工程目录webpack
先创建一个项目的工程目录,并在目录下边创建两个文件夹:dist 和 srcgit
1.2 初始化项目github
在安装Babel以前,需使用npm init先初始化咱们的项目。经过cmd打开命令行工具,进入项目目录,输入下边的命令:web
npm init -y
命令执行完成后,会在项目根目录下生产package.json文件。npm
1.3 全局安装Babel-clijson
npm install -g babel-cli
1.4 本地安装转码规则数组
npm install --save-dev babel-preset-es2015 babel-cli
安装完成后,咱们能够看一下咱们的package.json文件,已经多了devDependencies选项。浏览器
1.5 新建.babelrc
在根目录下新建.babelrc文件,.babelrc是Babel的配置文件。
该文件是用来设置转码规则和插件的,基本格式以下:
{ "presets":["es2015"], "plugins":[] }
1.6 babel基本用法
# 转码结果输出到标准输出 $ babel example.js # 转码结果写入一个文件 (--out-file 或 -o 参数指定输出文件) $ babel example.js --out-file compiled.js 或者 $ babel example.js -o compiled.js # 整个目录转码 (--out-dir 或 -d 参数指定输出目录) $ babel src --out-dir lib 或者 $ babel src -d lib # -s 参数生成source map文件 $ babel src -d lib -s
在src目录下,新建index.js文件,使用ES6中的 let声明和字符串模板
let name = 'Bread and Dream'; let greeting = `hello ${name}`;
在命令行输入
babel src/index.js -o dist/index.js
这时dist目录会生成 index.js 文件,输出结果为:
'use strict'; var name = 'Bread and Dream'; var greeting = 'hello ' + name;
项目文件最终结构
1.7 简化转化命令:
使用babel命令行,一大长串,很容易忘记,因此,咱们能够进行改造,打开package.json文件,添加如下代码
{ "scripts": { "build": "babel src/index.js -o dist/index.js" }, }
修改好后,之后咱们就能够在命令行输入 npm run build 进行转换了。
(注:build是自定义的,为了语义化命名为build,固然也能够命名成其余的,例如 compile)
二、webpack + Babel 构建 ES6 开发平台
2.1 搭建 webpack 基本文件目录
npm install -g webpack@3
npm init -y
npm i --save-dev webpack@3
新建 webpack.config.js(用于配置 webpack 的运行方式),最简单的配置以下:
module.exports= {
/* webpack 入口起点 */ entry:'./index.js', /* webpack 输出 */ output:{ // 输出 文件名 filename:'./test.js' },
}
2.2 安装babel相关
2.3 将 webpack 和 Babel 结合在一块儿
须要在二者之间创建一条纽带,而经过 webpack 的 loaders 就能够生成这条纽带,所以要修改 webpack.config.js 配置文件:
/ webpack loaders 配置 /
module:{
rules:[ { test:/\.js$/, use:{ loader:'babel-loader', }, } ],
},
就是针对以 .js 结尾的文件使用 babel-loader。因为项目中还不存在 babel-loader,因此要先安装该模块:
npm i --save-dev babel-loader
使用 webpack 提供的方法,具体在 webpack.config.js 的 module.rules.use.options 中配置
/* webpack loaders 配置 */ module:{ rules:[ { test:/\.js$/, use:{ loader:'babel-loader', options:{ presets:[ 'babel-preset-env', 'babel-preset-stage-0' ] } }, } ], },
最终的项目结构为:
在当前目录下执行 webpack 命令
webpack
输入文件 index.js 中的ES6代码已经被转换成输出文件 test.js 中的 ES5 代码了:
三、Traceur转码器
Google公司的Traceur转码器,也能够将ES6代码转为ES5代码。
3.1 直接在页面中使用:
<!-- 加载Traceur编译器 --> <script src="http://google.github.io/traceur-compiler/bin/traceur.js" type="text/javascript"></script> <!-- 打开实验选项,不然有些特性可能编译不成功 --> <script> traceur.options.experimental = true; </script>
写ES6代码,用:
<script type="module"> // ES6代码 </script>
注意:script标签的type属性的值是module,而不是text/javascript。这是Traceur编译器识别ES6代码的标识。
3.2 Traceur的命令行转换方法:
首先须要用npm安装。
$ npm install -g traceur
直接运行ES6代码,以index.js为例
$ traceur index.js
将ES6输出为ES5脚本
$ traceur --script index.js --out es5.js
为了防止有些特性编译不成功,最好加上–experimental选项。
$ traceur --script index.js --out es5.js --experimental
四、直接在线编译
Babel提供一个REPL在线编译器,能够在线将ES6代码转为ES5代码。
转换后的代码,能够直接做为ES5代码插入网页运行。
五、总结
使用babel搭建环境的顺序:
babel 本质就是一个 JavaScript 编译器,经过:
固然,感兴趣的小伙伴能够深刻研究下babel及其插件的源码,了解其运行机制,以便更全面的掌握ES6转ES5的相关原理、机制。