@@ -110,6 +110,12 @@ input.map(function (item) {
110110
111111上面的原始代码用了箭头函数,Babel 将其转为普通函数,就能在不支持箭头函数的 JavaScript 环境执行了。
112112
113+ 下面的命令在项目目录中,安装 Babel。
114+
115+ ``` bash
116+ $ npm install --save-dev @babel/core
117+ ```
118+
113119### 配置文件` .babelrc `
114120
115121Babel 的配置文件是` .babelrc ` ,存放在项目的根目录下。使用 Babel 的第一步,就是配置这个文件。
@@ -127,164 +133,116 @@ Babel 的配置文件是`.babelrc`,存放在项目的根目录下。使用 Bab
127133
128134``` bash
129135# 最新转码规则
130- $ npm install --save-dev babel- preset-latest
136+ $ npm install --save-dev @ babel/ preset-env
131137
132138# react 转码规则
133- $ npm install --save-dev babel-preset-react
134-
135- # 不同阶段语法提案的转码规则(共有4个阶段),选装一个
136- $ npm install --save-dev babel-preset-stage-0
137- $ npm install --save-dev babel-preset-stage-1
138- $ npm install --save-dev babel-preset-stage-2
139- $ npm install --save-dev babel-preset-stage-3
139+ $ npm install --save-dev @babel/preset-react
140140```
141141
142142然后,将这些规则加入` .babelrc ` 。
143143
144144``` javascript
145145 {
146146 " presets" : [
147- " latest" ,
148- " react" ,
149- " stage-2"
147+ " @babel/env" ,
148+ " @babel/preset-react"
150149 ],
151150 " plugins" : []
152151 }
153152```
154153
155154注意,以下所有 Babel 工具和模块的使用,都必须先写好` .babelrc ` 。
156155
157- ### 命令行转码` babel-cli `
156+ ### 命令行转码
158157
159- Babel 提供 ` babel- cli ` 工具 ,用于命令行转码。
158+ Babel 提供命令行工具 ` @ babel/ cli` ,用于命令行转码。
160159
161160它的安装命令如下。
162161
163162``` bash
164- $ npm install --global babel- cli
163+ $ npm install --save-dev @ babel/ cli
165164```
166165
167166基本用法如下。
168167
169168``` bash
170169# 转码结果输出到标准输出
171- $ babel example.js
170+ $ npx babel example.js
172171
173172# 转码结果写入一个文件
174173# --out-file 或 -o 参数指定输出文件
175- $ babel example.js --out-file compiled.js
174+ $ npx babel example.js --out-file compiled.js
176175# 或者
177- $ babel example.js -o compiled.js
176+ $ npx babel example.js -o compiled.js
178177
179178# 整个目录转码
180179# --out-dir 或 -d 参数指定输出目录
181- $ babel src --out-dir lib
180+ $ npx babel src --out-dir lib
182181# 或者
183- $ babel src -d lib
182+ $ npx babel src -d lib
184183
185184# -s 参数生成source map文件
186- $ babel src -d lib -s
185+ $ npx babel src -d lib -s
187186```
188187
189- 上面代码是在全局环境下,进行 Babel 转码。这意味着,如果项目要运行,全局环境必须有 Babel,也就是说项目产生了对环境的依赖。另一方面,这样做也无法支持不同项目使用不同版本的 Babel。
190-
191- 一个解决办法是将` babel-cli ` 安装在项目之中。
192-
193- ``` bash
194- # 安装
195- $ npm install --save-dev babel-cli
196- ```
197-
198- 然后,改写` package.json ` 。
188+ ### babel-node
199189
200- ``` javascript
201- {
202- // ...
203- " devDependencies" : {
204- " babel-cli" : " ^6.0.0"
205- },
206- " scripts" : {
207- " build" : " babel src -d lib"
208- },
209- }
210- ```
190+ ` @babel/node ` 模块的` babel-node ` 命令,提供一个支持 ES6 的 REPL 环境。它支持 Node 的 REPL 环境的所有功能,而且可以直接运行 ES6 代码。
211191
212- 转码的时候,就执行下面的命令 。
192+ 首先,安装这个模块 。
213193
214- ``` javascript
215- $ npm run build
194+ ``` bash
195+ $ npm install --save-dev @babel/node
216196```
217197
218- ### babel-node
219-
220- ` babel-cli ` 工具自带一个` babel-node ` 命令,提供一个支持 ES6 的 REPL 环境。它支持 Node 的 REPL 环境的所有功能,而且可以直接运行 ES6 代码。
221-
222- 它不用单独安装,而是随` babel-cli ` 一起安装。然后,执行` babel-node ` 就进入 REPL 环境。
198+ 然后,执行` babel-node ` 就进入 REPL 环境。
223199
224200``` bash
225- $ babel-node
201+ $ npx babel-node
226202> (x => x * 2)(1)
2272032
228204```
229205
230206` babel-node ` 命令可以直接运行 ES6 脚本。将上面的代码放入脚本文件` es6.js ` ,然后直接运行。
231207
232208``` bash
233- $ babel-node es6.js
209+ # es6.js 的代码
210+ # console.log((x => x * 2)(1));
211+ $ npx babel-node es6.js
2342122
235213```
236214
237- ` babel-node ` 也可以安装在项目中。
215+ ### @ babel/register 模块
238216
239- ``` bash
240- $ npm install --save-dev babel-cli
241- ```
242-
243- 然后,改写` package.json ` 。
244-
245- ``` javascript
246- {
247- " scripts" : {
248- " script-name" : " babel-node script.js"
249- }
250- }
251- ```
252-
253- 上面代码中,使用` babel-node ` 替代` node ` ,这样` script.js ` 本身就不用做任何转码处理。
254-
255- ### babel-register
256-
257- ` babel-register ` 模块改写` require ` 命令,为它加上一个钩子。此后,每当使用` require ` 加载` .js ` 、` .jsx ` 、` .es ` 和` .es6 ` 后缀名的文件,就会先用 Babel 进行转码。
217+ ` @babel/register ` 模块改写` require ` 命令,为它加上一个钩子。此后,每当使用` require ` 加载` .js ` 、` .jsx ` 、` .es ` 和` .es6 ` 后缀名的文件,就会先用 Babel 进行转码。
258218
259219``` bash
260- $ npm install --save-dev babel- register
220+ $ npm install --save-dev @ babel/ register
261221```
262222
263- 使用时,必须首先加载` babel- register ` 。
223+ 使用时,必须首先加载` @ babel/ register` 。
264224
265225``` bash
266- require(" babel-register" );
267- require(" ./index.js" );
226+ // index.js
227+ require(' @babel/register' );
228+ require(' ./es6.js' );
268229```
269230
270231然后,就不需要手动对` index.js ` 转码了。
271232
272- 需要注意的是,` babel-register ` 只会对` require ` 命令加载的文件转码,而不会对当前文件转码。另外,由于它是实时转码,所以只适合在开发环境使用。
273-
274- ### babel-core
275-
276- 如果某些代码需要调用 Babel 的 API 进行转码,就要使用` babel-core ` 模块。
277-
278- 安装命令如下。
279-
280233``` bash
281- $ npm install babel-core --save
234+ $ node index.js
235+ 2
282236```
283237
284- 然后,在项目中就可以调用` babel-core ` 。
238+ 需要注意的是,` @babel/register ` 只会对` require ` 命令加载的文件转码,而不会对当前文件转码。另外,由于它是实时转码,所以只适合在开发环境使用。
239+
240+ ### babel API
241+
242+ 如果某些代码需要调用 Babel 的 API 进行转码,就要使用` @babel/core ` 模块。
285243
286244``` javascript
287- var babel = require (' babel- core' );
245+ var babel = require (' @ babel/ core' );
288246
289247// 字符串转码
290248babel .transform (' code();' , options);
@@ -310,17 +268,19 @@ babel.transformFromAst(ast, code, options);
310268
311269``` javascript
312270var es6Code = ' let x = n => n + 1' ;
313- var es5Code = require (' babel- core' )
271+ var es5Code = require (' @ babel/ core' )
314272 .transform (es6Code, {
315- presets: [' latest ' ]
273+ presets: [' @babel/env ' ]
316274 })
317275 .code ;
276+
277+ console .log (es5Code);
318278// '"use strict";\n\nvar x = function x(n) {\n return n + 1;\n};'
319279```
320280
321281上面代码中,` transform ` 方法的第一个参数是一个字符串,表示需要被转换的 ES6 代码,第二个参数是转换的配置对象。
322282
323- ### babel- polyfill
283+ ### @ babel/ polyfill
324284
325285Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API,比如` Iterator ` 、` Generator ` 、` Set ` 、` Map ` 、` Proxy ` 、` Reflect ` 、` Symbol ` 、` Promise ` 等全局对象,以及一些定义在全局对象上的方法(比如` Object.assign ` )都不会转码。
326286
@@ -329,107 +289,34 @@ Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 A
329289安装命令如下。
330290
331291``` bash
332- $ npm install --save babel- polyfill
292+ $ npm install --save-dev @ babel/ polyfill
333293```
334294
335295然后,在脚本头部,加入如下一行代码。
336296
337297``` javascript
338- import ' babel- polyfill' ;
298+ import ' @ babel/ polyfill' ;
339299// 或者
340- require (' babel- polyfill' );
300+ require (' @ babel/ polyfill' );
341301```
342302
343303Babel 默认不转码的 API 非常多,详细清单可以查看` babel-plugin-transform-runtime ` 模块的[ definitions.js] ( https://github.com/babel/babel/blob/master/packages/babel-plugin-transform-runtime/src/definitions.js ) 文件。
344304
345305### 浏览器环境
346306
347- Babel 也可以用于浏览器环境。但是,从 Babel 6.0 开始,不再直接提供浏览器版本,而是要用构建工具构建出来。如果你没有或不想使用构建工具,可以使用 [ babel- standalone] ( https://github.com/Daniel15/ babel-standalone ) 模块提供的浏览器版本,将其插入网页。
307+ Babel 也可以用于浏览器环境,使用 [ @ babel/ standalone ] ( https://babeljs.io/docs/en/next/ babel-standalone.html ) 模块提供的浏览器版本,将其插入网页。
348308
349309``` html
350- <script src =" https://cdnjs.cloudflare. com/ajax/libs/ babel-standalone/6.4.4 /babel.min.js" ></script >
310+ <script src =" https://unpkg. com/@ babel/standalone /babel.min.js" ></script >
351311<script type =" text/babel" >
352312// Your ES6 code
353313 </script >
354314```
355315
356316注意,网页实时将 ES6 代码转为 ES5,对性能会有影响。生产环境需要加载已经转码完成的脚本。
357317
358- 下面是如何将代码打包成浏览器可以使用的脚本,以` Babel ` 配合` Browserify ` 为例。首先,安装` babelify ` 模块。
359-
360- ``` bash
361- $ npm install --save-dev babelify babel-preset-latest
362- ```
363-
364- 然后,再用命令行转换 ES6 脚本。
365-
366- ``` bash
367- $ browserify script.js -o bundle.js \
368- -t [ babelify --presets [ latest ] ]
369- ```
370-
371- 上面代码将 ES6 脚本` script.js ` ,转为` bundle.js ` ,浏览器直接加载后者就可以了。
372-
373- 在` package.json ` 设置下面的代码,就不用每次命令行都输入参数了。
374-
375- ``` javascript
376- {
377- " browserify" : {
378- " transform" : [[" babelify" , { " presets" : [" latest" ] }]]
379- }
380- }
381- ```
382-
383- ### 在线转换
384-
385318Babel 提供一个[ REPL 在线编译器] ( https://babeljs.io/repl/ ) ,可以在线将 ES6 代码转为 ES5 代码。转换后的代码,可以直接作为 ES5 代码插入网页运行。
386319
387- ### 与其他工具的配合
388-
389- 许多工具需要 Babel 进行前置转码,这里举两个例子:ESLint 和 Mocha。
390-
391- ESLint 用于静态检查代码的语法和风格,安装命令如下。
392-
393- ``` bash
394- $ npm install --save-dev eslint babel-eslint
395- ```
396-
397- 然后,在项目根目录下,新建一个配置文件` .eslintrc ` ,在其中加入` parser ` 字段。
398-
399- ``` javascript
400- {
401- " parser" : " babel-eslint" ,
402- " rules" : {
403- ...
404- }
405- }
406- ```
407-
408- 再在` package.json ` 之中,加入相应的` scripts ` 脚本。
409-
410- ``` javascript
411- {
412- " name" : " my-module" ,
413- " scripts" : {
414- " lint" : " eslint my-files.js"
415- },
416- " devDependencies" : {
417- " babel-eslint" : " ..." ,
418- " eslint" : " ..."
419- }
420- }
421- ```
422-
423- Mocha 则是一个测试框架,如果需要执行使用 ES6 语法的测试脚本,可以修改` package.json ` 的` scripts.test ` 。
424-
425- ``` javascript
426- " scripts" : {
427- " test" : " mocha --ui qunit --compilers js:babel-core/register"
428- }
429- ```
430-
431- 上面命令中,` --compilers ` 参数指定脚本的转码器,规定后缀名为` js ` 的文件,都需要使用` babel-core/register ` 先转码。
432-
433320## Traceur 转码器
434321
435322Google 公司的[ Traceur] ( https://github.com/google/traceur-compiler ) 转码器,也可以将 ES6 代码转为 ES5 代码。
0 commit comments