@@ -74,44 +74,149 @@ $ node --v8-options | grep harmony
74
74
75
75
Google公司的[ Traceur] ( https://github.com/google/traceur-compiler ) 编译器,可以将ES6代码编译为ES5代码。
76
76
77
- Traceur是一个node.js的模块,需要用npm安装。
77
+ 它有多种使用方式。
78
+
79
+ ** (1)直接插入网页**
80
+
81
+ Traceur允许将ES6代码直接插入网页。
82
+
83
+ 首先,必须在网页头部加载Traceur库文件。
84
+
85
+ ``` html
86
+
87
+ <!-- 加载Traceur编译器 -->
88
+ <script src =" http://google.github.io/traceur-compiler/bin/traceur.js"
89
+ type =" text/javascript" ></script >
90
+ <!-- 将Traceur编译器用于网页 -->
91
+ <script src =" http://google.github.io/traceur-compiler/src/bootstrap.js"
92
+ type =" text/javascript" ></script >
93
+ <!-- 打开实验选项,否则有些特性可能编译不成功 -->
94
+ <script >
95
+ traceur .options .experimental = true ;
96
+ </script >
97
+
98
+ ```
99
+
100
+ 接下来,就可以把ES6代码放入上面这些代码的下方。
101
+
102
+ ``` html
103
+
104
+ <script type =" module" >
105
+ class Calc {
106
+ constructor (){
107
+ console .log (' Calc constructor' );
108
+ }
109
+ add (a , b ){
110
+ return a + b;
111
+ }
112
+ }
113
+
114
+ var c = new Calc ();
115
+ console .log (c .add (4 ,5 ));
116
+ </script >
117
+
118
+ ```
119
+
120
+ 正常情况下,上面代码会在控制台打印出9。
121
+
122
+ 注意,` script ` 标签的` type ` 属性的值是` module ` ,而不是` text/javascript ` 。这是Traceur编译器识别ES6代码的标识,编译器会自动将所有` type=module ` 的代码编译为ES5,然后再交给浏览器执行。
123
+
124
+ 如果ES6代码是一个外部文件,也可以用` script ` 标签插入网页。
125
+
126
+ ``` html
127
+
128
+ <script type =" module" src =" calc.js" >
129
+ </script >
130
+
131
+ ```
132
+
133
+ ** (2)在线转换**
134
+
135
+ Traceur提供一个[ 在线编译器] ( http://google.github.io/traceur-compiler/demo/repl.html ) ,可以在线将ES6代码转为ES5代码。转换后的代码,可以直接作为ES5代码插入网页运行。
136
+
137
+ 上面的例子转为ES5代码运行,就是下面这个样子。
138
+
139
+ ``` html
140
+
141
+ <script src =" http://google.github.io/traceur-compiler/bin/traceur.js"
142
+ type =" text/javascript" ></script >
143
+ <script src =" http://google.github.io/traceur-compiler/src/bootstrap.js"
144
+ type =" text/javascript" ></script >
145
+ <script >
146
+ traceur .options .experimental = true ;
147
+ </script >
148
+ <script >
149
+ $traceurRuntime .ModuleStore .getAnonymousModule (function () {
150
+ " use strict" ;
151
+
152
+ var Calc = function Calc () {
153
+ console .log (' Calc constructor' );
154
+ };
155
+
156
+ ($traceurRuntime .createClass )(Calc, {add : function (a , b ) {
157
+ return a + b;
158
+ }}, {});
159
+
160
+ var c = new Calc ();
161
+ console .log (c .add (4 , 5 ));
162
+ return {};
163
+ });
164
+ </script >
165
+
166
+ ```
167
+
168
+ ** (3)命令行转换**
169
+
170
+ 作为命令行工具使用时,Traceur是一个node.js的模块,首先需要用npm安装。
78
171
79
172
``` bash
80
173
81
174
npm install -g traceur
82
175
83
176
```
84
177
85
- 它有多种使用方法,首先是命令行工具。
178
+ 安装成功后,就可以在命令行下使用traceur了。
179
+
180
+ traceur直接运行es6脚本文件,会在标准输出显示运行结果,以前面的calc.js为例。
86
181
87
182
``` bash
88
183
89
- # 运行ES6文件,在标准输出显示结果
90
- traceur /path/to/es6
184
+ $ traceur calc.js
185
+ Calc constructor
186
+ 9
91
187
92
- # 将ES6文件转为ES5文件
93
- traceur --script /path/to/es6 --out /path/to/es5
188
+ ```
189
+
190
+ 如果要将ES6脚本转为ES5,要采用下面的写法
191
+
192
+ ``` bash
193
+
194
+ traceur --script calc.es6.js --out calc.es5.js
94
195
95
196
```
96
197
97
- 命令行下转换的文件,就可以放到浏览器中运行。假定转换后的文件是result.js,它插入浏览器的写法如下 。
198
+ 上面代码的 ` --script ` 选项表示指定输入文件, ` --out ` 选项表示指定输出文件 。
98
199
99
- ``` html
200
+ 为了防止有些特性编译不成功,最好加上 ` --experimental ` 选项。
100
201
101
- <script src =" bin/traceur-runtime.js" ></script >
102
- <script src =" out/result.js" ></script >
202
+ ``` bash
203
+
204
+ traceur --script calc.es6.js --out calc.es5.js --experimental
103
205
104
206
```
105
207
106
- 上面代码中的traceur-runtime.js,是traceur提供的浏览器函数库。
208
+ 命令行下转换的文件,就可以放到浏览器中运行。
209
+
210
+ ** (4)Node.js环境的用法**
107
211
108
- Traceur的node.js用法如下。
212
+ Traceur的node.js用法如下(假定已安装traceur模块) 。
109
213
110
214
``` javascript
111
215
112
216
var traceur = require (' traceur' );
113
217
var fs = require (' fs' );
114
218
219
+ // 将ES6脚本转为字符串
115
220
var contents = fs .readFileSync (' es6-file.js' ).toString ();
116
221
117
222
var result = traceur .compile (contents, {
@@ -123,13 +228,14 @@ var result = traceur.compile(contents, {
123
228
124
229
if (result .error )
125
230
throw result .error ;
231
+
232
+ // result对象的js属性就是转换后的ES5代码
126
233
fs .writeFileSync (' out.js' , result .js );
234
+ // sourceMap属性对应map文件
127
235
fs .writeFileSync (' out.js.map' , result .sourceMap );
128
236
129
237
```
130
238
131
- 除了命令行工具,Traceur还提供一个[ 浏览器界面] ( http://google.github.io/traceur-compiler/demo/repl.html ) ,用于在线转换ES6代码。
132
-
133
239
## ECMAScript 7
134
240
135
241
2013年3月,ES6的草案封闭,不再接受新功能了。新的功能将被加入ES7。
0 commit comments