Skip to content

Commit 0e134b5

Browse files
committed
edit intro/traceur
1 parent ad0499d commit 0e134b5

File tree

1 file changed

+120
-14
lines changed

1 file changed

+120
-14
lines changed

docs/intro.md

Lines changed: 120 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,44 +74,149 @@ $ node --v8-options | grep harmony
7474

7575
Google公司的[Traceur](https://github.com/google/traceur-compiler)编译器,可以将ES6代码编译为ES5代码。
7676

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安装。
78171

79172
```bash
80173

81174
npm install -g traceur
82175

83176
```
84177

85-
它有多种使用方法,首先是命令行工具。
178+
安装成功后,就可以在命令行下使用traceur了。
179+
180+
traceur直接运行es6脚本文件,会在标准输出显示运行结果,以前面的calc.js为例。
86181

87182
```bash
88183

89-
# 运行ES6文件,在标准输出显示结果
90-
traceur /path/to/es6
184+
$ traceur calc.js
185+
Calc constructor
186+
9
91187

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
94195

95196
```
96197

97-
命令行下转换的文件,就可以放到浏览器中运行。假定转换后的文件是result.js,它插入浏览器的写法如下
198+
上面代码的`--script`选项表示指定输入文件,`--out`选项表示指定输出文件
98199

99-
```html
200+
为了防止有些特性编译不成功,最好加上`--experimental`选项。
100201

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
103205

104206
```
105207

106-
上面代码中的traceur-runtime.js,是traceur提供的浏览器函数库。
208+
命令行下转换的文件,就可以放到浏览器中运行。
209+
210+
**(4)Node.js环境的用法**
107211

108-
Traceur的node.js用法如下。
212+
Traceur的node.js用法如下(假定已安装traceur模块)
109213

110214
```javascript
111215

112216
var traceur = require('traceur');
113217
var fs = require('fs');
114218

219+
// 将ES6脚本转为字符串
115220
var contents = fs.readFileSync('es6-file.js').toString();
116221

117222
var result = traceur.compile(contents, {
@@ -123,13 +228,14 @@ var result = traceur.compile(contents, {
123228

124229
if (result.error)
125230
throw result.error;
231+
232+
// result对象的js属性就是转换后的ES5代码
126233
fs.writeFileSync('out.js', result.js);
234+
// sourceMap属性对应map文件
127235
fs.writeFileSync('out.js.map', result.sourceMap);
128236

129237
```
130238

131-
除了命令行工具,Traceur还提供一个[浏览器界面](http://google.github.io/traceur-compiler/demo/repl.html),用于在线转换ES6代码。
132-
133239
## ECMAScript 7
134240

135241
2013年3月,ES6的草案封闭,不再接受新功能了。新的功能将被加入ES7。

0 commit comments

Comments
 (0)