文章总结学习来自于:阮一峰-ECMAScript6入门
1.JavaScript
与ECMAScript
的区别
ECMAScript是JavaScript的规格,JavaScript是ECMAScript的实现。日常场合,这两个词是可以互换的。
2.检查你所在浏览器对ES6的支持情况.
3.配置文件.babelrc
Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码,从而在现有环境执行。Babel 的配置文件是
.babelrc
,存放在项目的根目录下。使用 Babel 的第一步,就是配置这个文件。该文件用来设置转码规则和插件,基本格式如下。(以下所有Babel工具和模块使用,都必须先写好.babelrc)
{
"presets": [],
"plugins": []
}
关于bebelrc的理解,建议在用vue-cli搭建好项目后,在根目录下有.babelrc文件,对比package.json进行观摩。
4.命令行转码babel-cli
Babel提供babel-cli工具,用于命令行转码。
安装命令:npm install --save-dev babel-cli
关于npm install (-save)(-save-dev)的参数小小知识点的说明,可参加我的另一篇总结:npm intsall -save 和-save-dev
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
上面代码是在全局环境下,进行 Babel 转码。这意味着,如果项目要运行,全局环境必须有 Babel,也就是说项目产生了对环境的依赖。另一方面,这样做也无法支持不同项目使用不同版本的 Babel。
一个解决办法是将babel-cli安装在项目之中。
# 安装
$ npm install --save-dev babel-cli
然后,改写package.json
{
// ...
"devDependencies": {
"babel-cli": "^6.0.0"
},
"scripts": {
"build": "babel src -d lib"
},
}
转码的时候,就执行下面的命令。
$ npm run build
5.babel-node
babel-node是在babel-cli的时候带着的,因此安装babel-cli之后,babel-node就不用单独安装了。babel-node命令可以直接运行 ES6 脚本。
6.babel-register
babel-registe
r模块改写require
命令,为它加上一个钩子。此后,每当使用require
加载.js
、.jsx
、.es
和.es6
后缀名的文件,就会先用Babel
进行转码。
$ npm install --save-dev babel-register
使用时,必须首先加载babel-register。
require("babel-register");
require("./index.js");
然后,就不需要手动对index.js转码了。
需要注意的是,babel-register只会对require命令加载的文件转码,而不会对当前文件转码。另外,由于它是实时转码,所以只适合在开发环境使用。
7.babel-core
如果某些代码需要调用 Babel 的 API 进行转码,就要使用babel-core模块。
安装命令如下。
$ npm install babel-core --save
然后,在项目中就可以调用babel-core。
var babel = require('babel-core');
// 字符串转码
babel.transform('code();', options);
// => { code, map, ast }
// 文件转码(异步)
babel.transformFile('filename.js', options, function(err, result) {
result; // => { code, map, ast }
});
// 文件转码(同步)
babel.transformFileSync('filename.js', options);
// => { code, map, ast }
// Babel AST转码
babel.transformFromAst(ast, code, options);
// => { code, map, ast }
配置对象
options
,可以参看官方文档http://babeljs.io/docs/usage/options/。
下面是一个例子。
var es6Code = 'let x = n => n + 1';
var es5Code = require('babel-core')
.transform(es6Code, {
presets: ['latest']
})
.code;
// '"use strict";\n\nvar x = function x(n) {\n return n + 1;\n};'
上面代码中,transform方法的第一个参数是一个字符串,表示需要被转换的 ES6 代码,第二个参数是转换的配置对象。
8.babel-ployfill
Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API,比如Iterator、Generator、Set、Map、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。
举例来说,ES6 在Array对象上新增了Array.from方法。Babel 就不会转码这个方法。如果想让这个方法运行,必须使用babel-polyfill,为当前环境提供一个垫片。
安装命令如下。
$ npm install --save babel-polyfill
Babel 默认不转码的 API 非常多,详细清单可以查看
babel-plugin-transform-runtime
模块的definitions.js文件。
网友评论