CSkin博客
标题: 【深入浅出 ES6】ES6 与 Babel - Broccoli 的联用 [打印本页]
作者: OneAPM 时间: 2016-3-9 11:11
标题: 【深入浅出 ES6】ES6 与 Babel - Broccoli 的联用
说明:
深入浅出 ES6指的是添加在 ECMASript 标准第六版中的 JavaScript 编程语言的新特性,简称为 ES6。 虽然 ES6 刚刚到来,但是人们已经开始谈论 ES7 了,它未来的样子,以及新标准能提供哪些光鲜亮丽的特性。作为网络开发者,我们想的则是如何将这些特性都用上。在之前的深入浅出 ES6 贴文中,我们曾多次鼓励读者朋友使用 ES6 在一些小工具的帮助下编写代码。并这样调戏你们: 如果你想在网络上使用这个新语法,你可以使用 Babel (一款 JS 编译器)或谷歌的 Traceur (一款编译器)将你的 ES6 代码翻译成网络友好型的 ES5。
今天,本文将向你展示详细的实现步骤。上面所提到的工具被称为转换编译器。转换编译器又被称为源到源的编译器 —— 将编程语言在同一个抽象层面进行转换的编译器。转换编译器使得我们在使用 ES6 编写代码的同时,保证代码在每一个浏览器中都能够运行。
一、我们的救星——转换编译器转换编译器使用简便。两个步骤就能解释清楚:
1.用 ES6 语法写出代码。
let q = 99;let myVariable = `${q} bottles of beer on the wall, ${q} bottles of beer.`;2.将上面的代码作为转换编译器的输入,编译器处理之后得到下面的输出:
"use strict";var q = 99;var myVariable = "" + q + " bottles of beer on the wall, " + q + " bottles of beer."这是我们熟知的 JavaScript,它能够在任何浏览器中使用。
至于转换编译器内部如何转换代码及其复杂,远非这篇小文能够解释得了。这就像我们不知道内置引擎的工作原理,但是我们却能够很好地驾驶车辆。因此,我们也可以将转换编译器看做一个能够处理代码的黑盒子。
Babel登场在一个具体的项目中,使用Babel有几种不同的方法。在工具中,有一种命令行工具,你能按照如下所示的格式发出命令:
babel script.js --out-file script-compiled.js你也可以使用浏览器版本。只需要将 Babel 添加为常用 JS 库,然后将你的 ES6 代码放入「 text/babel」类型标签中。如下所示:
<script src="node_modules/babel-core/browser.js"></script><script type="text/babel">// Your ES6 code</script>当你的代码库开始膨胀,你不得不将它们放在不同的文件和文件夹中时,这些方法都不会跟着膨胀。那时,你需要的是一个开发工具以及一个使用管道来整合Babel 的办法。
1.es6-fruits
2.es6-website
3.es6-modules
每个实例都建立在前一个例子的基础之上。我们从最小最基础的步骤开始,然后发展成一个通用的方案(作为雄伟计划的第一步)。本文将会详细描述前两个实例。此后,你就能独立阅读和理解实例3中的代码了。
如果你现在的想法是 —— 我就坐等浏览器来支持新特性吧 —— 那你就会掉队。即使最终实现了完全兼容,也必须花费很长的时间。而转换编译器却一直在这儿;而且 ECMAScript 标准会按计划每年发布新版本。因此,我们将会看到的是在统一的浏览器平台出现之前新标准的不断涌现。不妨现在就加入我们开始使用这些新特性吧。
二、第一个 Broccoli & Babel 项目Broccoli 是一个旨在实现项目开发的工具。通过使用 Broccoli 插件,你能够压缩合并、最小化文件等等。它节省了我们处理文件、目录以及每次项目改变后都要执行命令的时间。可以将它视为: 这就像是铁路管道资产,不过它在节点上运行而且与后端无关(backend-agnostic)。
1、项目设置
节点如果你的系统是 Unix,不要选择程序包管理器(如 apt,yum)安装。这是为了避免在安装时使用根管理权限。最好是在当前用户下使用上面提供的链接手动安装。你可以在 Do notsudo npm 了解为什么我们不推荐使用根权限。在那里你能找到其他的安装方法。
Broccoli我们首先使用下面的代码安装 Broccoli 项目:
mkdir es6-fruitscd es6-fruitsnpm init# Create an empty file called Brocfile.jstouch Brocfile.js然后安装 broccoli 和 broccoli-cli
# the broccoli librarynpm install --save-dev broccoli# command line toolnpm install -g broccoli-cli写入 ES6 代码新建 src 文件夹并放入文件 fruits.js
mkdir srcvim src/fruits.js在这个新文件中用 ES6 语法敲一段代码。
let fruits = [ {id: 100, name: 'strawberry'}, {id: 101, name: 'grapefruit'}, {id: 102, name: 'plum'}];for (let fruit of fruits) { let message = `ID: ${fruit.id} Name: ${fruit.name}`; console.log(message);}console.log(`List total: ${fruits.length}`);上面的代码样本使用了3个 ES6 的特性:
保存并尝试运行。
node src/fruits.js现在还不能运行,但是马上我们将会使用节点(Node)让它在任何浏览器中都可以执行。
let fruits = [ ^^^^^^SyntaxError: Unexpected identifier
2、转换编译器时间现在,我们将会使用 Broccoli 加载我们的代码并推向 Babel。编辑文件 Brocfile.js,加入这段代码:
// import the babel pluginvar babel = require('broccoli-babel-transpiler');// grab the source and transpile it in 1 stepfruits = babel('src'); // src/*.jsmodule.exports = fruits;注意我们需要使用 broccoli-babel-transpiler,即一个封装了 Babel 库的 Broccoli 插件,因此我们必须安装:
npm install --save-dev broccoli-babel-transpiler现在构建项目并执行代码:
broccoli build dist # compilenode dist/fruits.js # execute ES5输出应该长这样:
ID: 100 Name: strawberryID: 101 Name: grapefruitID: 102 Name: plumList total: 3这很简单嘛!你可以打开 dist/fruits.js,看一看转换的代码长啥样。Babel 转换编译器的一个不错的特性就是它能够得到可读的代码。
作者: 乔克斯 时间: 2016-3-9 11:58
好像是那里复制过来的。。。完全意义不明。。不懂。。。
作者: ingdear 时间: 2016-3-19 10:14
完全不知道是干啥的,应该是复制过来的。
作者: hkxxlyzm 时间: 2018-2-11 16:12
学习学习学习学习学习学习学习
作者: darker 时间: 2018-8-11 08:42
这是给我们看看,还是下载的??
欢迎光临 CSkin博客 (http://bbs.cskin.net/) |
Powered by Discuz! X3.2 |