首先babel是干什么的?Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。

babel就是为了支持原有的旧的环境。

一、配置文件.babelrc

Babel的配置文件是.babelrc,存放在项目的根目录下。使用Babel的第一步,就是配置这个文件。

该文件用来设置转码规则和插件,基本格式如下。


{"presets": [], "plugins": [] } 

presets字段设定转码规则,官方提供以下的规则集,你可以根据需要安装。


# ES2015转码规则
$ npm install --save-dev babel-preset-es2015 # react转码规则 $ npm install --save-dev babel-preset-react # ES7不同阶段语法提案的转码规则(共有4个阶段),选装一个 $ npm install --save-dev babel-preset-stage-0 $ npm install --save-dev babel-preset-stage-1 $ npm install --save-dev babel-preset-stage-2 $ npm install --save-dev babel-preset-stage-3 

然后,将这些规则加入.babelrc

{"presets": [ "es2015", "react", "stage-2" ], "plugins": [] } 

注意,以下所有Babel工具和模块的使用,都必须先写好.babelrc

二、命令行转码babel-cli

Babel提供babel-cli工具,用于命令行转码。

它的安装命令如下。


$ npm install --global babel-cli

基本用法如下。


# 转码结果输出到标准输出
$ 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

三、babel-node

babel-cli工具自带一个babel-node命令,提供一个支持ES6的REPL环境。它支持Node的REPL环境的所有功能,而且可以直接运行ES6代码。

它不用单独安装,而是随babel-cli一起安装。然后,执行babel-node就进入PEPL环境。


$ babel-node
> (x => x * 2)(1) 2 

babel-node命令可以直接运行ES6脚本。将上面的代码放入脚本文件es6.js,然后直接运行。


$ babel-node es6.js
2

babel-node也可以安装在项目中。


$ npm install --save-dev babel-cli

然后,改写package.json


{"scripts": { "script-name": "babel-node script.js" } } 

上面代码中,使用babel-node替代node,这样script.js本身就不用做任何转码处理。

四、babel-register

babel-register模块改写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命令加载的文件转码,而不会对当前文件转码。另外,由于它是实时转码,所以只适合在开发环境使用。

五、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: ['es2015'] }) .code; // '"use strict";\n\nvar x = function x(n) {\n return n + 1;\n};' 

上面代码中,transform方法的第一个参数是一个字符串,表示需要转换的ES6代码,第二个参数是转换的配置对象。

六、babel-polyfill

Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。

举例来说,ES6在Array对象上新增了Array.from方法。Babel就不会转码这个方法。如果想让这个方法运行,必须使用babel-polyfill,为当前环境提供一个垫片。

安装命令如下。


$ npm install --save babel-polyfill

然后,在脚本头部,加入如下一行代码。


import 'babel-polyfill';
// 或者
require('babel-polyfill'); 

Babel默认不转码的API非常多,详细清单可以查看babel-plugin-transform-runtime模块的definitions.js文件。

七、浏览器环境

Babel也可以用于浏览器环境。但是,从Babel 6.0开始,不再直接提供浏览器版本,而是要用构建工具构建出来。如果你没有或不想使用构建工具,可以通过安装5.x版本的babel-core模块获取。


$ npm install babel-core@old

运行上面的命令以后,就可以在当前目录的node_modules/babel-core/子目录里面,找到babel的浏览器版本browser.js(未精简)和browser.min.js(已精简)。

然后,将下面的代码插入网页。


<script src="node_modules/babel-core/browser.js"></script> <script type="text/babel"> // Your ES6 code </script> 

上面代码中,browser.js是Babel提供的转换器脚本,可以在浏览器运行。用户的ES6脚本放在script标签之中,但是要注明type="text/babel"

另一种方法是使用babel-standalone模块提供的浏览器版本,将其插入网页。


<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.4.4/babel.min.js"></script> <script type="text/babel"> // Your ES6 code </script> 

注意,网页中实时将ES6代码转为ES5,对性能会有影响。生产环境需要加载已经转码完成的脚本。

下面是如何将代码打包成浏览器可以使用的脚本,以Babel配合Browserify为例。首先,安装babelify模块。


$ npm install --save-dev babelify babel-preset-es2015

然后,再用命令行转换ES6脚本。


$  browserify script.js -o bundle.js \-t [ babelify --presets [ es2015 react ] ] 

上面代码将ES6脚本script.js,转为bundle.js,浏览器直接加载后者就可以了。

package.json设置下面的代码,就不用每次命令行都输入参数了。


{"browserify": { "transform": [["babelify", { "presets": ["es2015"] }]] } } 

八、在线转换

Babel提供一个REPL在线编译器,可以在线将ES6代码转为ES5代码。转换后的代码,可以直接作为ES5代码插入网页运行。

九、与其他工具的配合

许多工具需要Babel进行前置转码,这里举两个例子:ESLint和Mocha。

ESLint 用于静态检查代码的语法和风格,安装命令如下。


$ npm install --save-dev eslint babel-eslint

然后,在项目根目录下,新建一个配置文件.eslint,在其中加入parser字段。


{"parser": "babel-eslint", "rules": { ... } } 

再在package.json之中,加入相应的scripts脚本。

{"name": "my-module", "scripts": { "lint": "eslint my-files.js" }, "devDependencies": { "babel-eslint": "...", "eslint": "..." } } 

Mocha 则是一个测试框架,如果需要执行使用ES6语法的测试脚本,可以修改package.jsonscripts.test


"scripts": {"test": "mocha --ui qunit --compilers js:babel-core/register" } 

上面命令中,--compilers参数指定脚本的转码器,规定后缀名为js的文件,都需要使用babel-core/register先转码。

一、配置文件.babelrc

Babel的配置文件是.babelrc,存放在项目的根目录下。使用Babel的第一步,就是配置这个文件。

该文件用来设置转码规则和插件,基本格式如下。


{"presets": [],"plugins": []
}

presets字段设定转码规则,官方提供以下的规则集,你可以根据需要安装。


# ES2015转码规则
$ npm install --save-dev babel-preset-es2015# react转码规则
$ npm install --save-dev babel-preset-react# ES7不同阶段语法提案的转码规则(共有4个阶段),选装一个
$ npm install --save-dev babel-preset-stage-0
$ npm install --save-dev babel-preset-stage-1
$ npm install --save-dev babel-preset-stage-2
$ npm install --save-dev babel-preset-stage-3

然后,将这些规则加入.babelrc

{"presets": ["es2015","react","stage-2"],"plugins": []}

注意,以下所有Babel工具和模块的使用,都必须先写好.babelrc

二、命令行转码babel-cli

Babel提供babel-cli工具,用于命令行转码。

它的安装命令如下。


$ npm install --global babel-cli

基本用法如下。


# 转码结果输出到标准输出
$ 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

三、babel-node

babel-cli工具自带一个babel-node命令,提供一个支持ES6的REPL环境。它支持Node的REPL环境的所有功能,而且可以直接运行ES6代码。

它不用单独安装,而是随babel-cli一起安装。然后,执行babel-node就进入PEPL环境。


$ babel-node
> (x => x * 2)(1)
2

babel-node命令可以直接运行ES6脚本。将上面的代码放入脚本文件es6.js,然后直接运行。


$ babel-node es6.js
2

babel-node也可以安装在项目中。


$ npm install --save-dev babel-cli

然后,改写package.json


{"scripts": {"script-name": "babel-node script.js"}
}

上面代码中,使用babel-node替代node,这样script.js本身就不用做任何转码处理。

四、babel-register

babel-register模块改写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命令加载的文件转码,而不会对当前文件转码。另外,由于它是实时转码,所以只适合在开发环境使用。

五、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: ['es2015']}).code;
// '"use strict";\n\nvar x = function x(n) {\n  return n + 1;\n};'

上面代码中,transform方法的第一个参数是一个字符串,表示需要转换的ES6代码,第二个参数是转换的配置对象。

六、babel-polyfill

Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。

举例来说,ES6在Array对象上新增了Array.from方法。Babel就不会转码这个方法。如果想让这个方法运行,必须使用babel-polyfill,为当前环境提供一个垫片。

安装命令如下。


$ npm install --save babel-polyfill

然后,在脚本头部,加入如下一行代码。


import 'babel-polyfill';
// 或者
require('babel-polyfill');

Babel默认不转码的API非常多,详细清单可以查看babel-plugin-transform-runtime模块的definitions.js文件。

七、浏览器环境

Babel也可以用于浏览器环境。但是,从Babel 6.0开始,不再直接提供浏览器版本,而是要用构建工具构建出来。如果你没有或不想使用构建工具,可以通过安装5.x版本的babel-core模块获取。


$ npm install babel-core@old

运行上面的命令以后,就可以在当前目录的node_modules/babel-core/子目录里面,找到babel的浏览器版本browser.js(未精简)和browser.min.js(已精简)。

然后,将下面的代码插入网页。


<script src="node_modules/babel-core/browser.js"></script>
<script type="text/babel">
// Your ES6 code
</script>

上面代码中,browser.js是Babel提供的转换器脚本,可以在浏览器运行。用户的ES6脚本放在script标签之中,但是要注明type="text/babel"

另一种方法是使用babel-standalone模块提供的浏览器版本,将其插入网页。


<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.4.4/babel.min.js"></script>
<script type="text/babel">
// Your ES6 code
</script>

注意,网页中实时将ES6代码转为ES5,对性能会有影响。生产环境需要加载已经转码完成的脚本。

下面是如何将代码打包成浏览器可以使用的脚本,以Babel配合Browserify为例。首先,安装babelify模块。


$ npm install --save-dev babelify babel-preset-es2015

然后,再用命令行转换ES6脚本。


$  browserify script.js -o bundle.js \-t [ babelify --presets [ es2015 react ] ]

上面代码将ES6脚本script.js,转为bundle.js,浏览器直接加载后者就可以了。

package.json设置下面的代码,就不用每次命令行都输入参数了。


{"browserify": {"transform": [["babelify", { "presets": ["es2015"] }]]}
}

八、在线转换

Babel提供一个REPL在线编译器,可以在线将ES6代码转为ES5代码。转换后的代码,可以直接作为ES5代码插入网页运行。

九、与其他工具的配合

许多工具需要Babel进行前置转码,这里举两个例子:ESLint和Mocha。

ESLint 用于静态检查代码的语法和风格,安装命令如下。


$ npm install --save-dev eslint babel-eslint

然后,在项目根目录下,新建一个配置文件.eslint,在其中加入parser字段。


{"parser": "babel-eslint","rules": {...}
}

再在package.json之中,加入相应的scripts脚本。

{"name": "my-module","scripts": {"lint": "eslint my-files.js"},"devDependencies": {"babel-eslint": "...","eslint": "..."}}

Mocha 则是一个测试框架,如果需要执行使用ES6语法的测试脚本,可以修改package.jsonscripts.test


"scripts": {"test": "mocha --ui qunit --compilers js:babel-core/register"
}

上面命令中,--compilers参数指定脚本的转码器,规定后缀名为js的文件,都需要使用babel-core/register先转码。

转载于:https://www.cnblogs.com/superAnny/p/8582012.html

Babel 是干什么的相关推荐

  1. Babel是什么?Babel到底可以用来干嘛___一文带你从零开始认识Babel

    引入 在此之前或许你已经用过babel,也许听说过什么 babel-loader babel-core.babel-cli.babel-plugin--.babel-preset-env 反正各种乱七 ...

  2. Webpack 4x 之路 ( 五 )

    在上一篇中我们在html文件中也引用了一张图片,打包完毕后在浏览器控制台报错: GET file:///D:/myweb/webpack/webpack_study_demo/webpack_new_ ...

  3. webpack4.0 CheatSheet

    还在为webpack的配置而烦恼吗?这里有一份webpack从简易到高级版本的配置.还附赠配置地址,你想要吗?不,你不想.老老实实自己配置去吧. 压箱底的笔记而已,大家看看乐乐就好了,这是笔者为了练习 ...

  4. 详解babel的配置文件.babelrc

    最近在搞项目迁移,一切都是从零开始.有的浏览器还不能识别最新的es6语法,在进行项目框架搭建的时候需要将es6最新的语法转化为浏览器能识别的语法,这个时候就用到了babel. 一.什么是babel? ...

  5. 抽象语法树AST以及babel原理

    什么是AST? 借用一下百度百科的解释: 在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示.它以树 ...

  6. Tour De Babel

    转自:http://code.google.com/p/windows-config/wiki/TourDeBabel #title Tour De Babel 通天塔导游 (译注:圣经记载:在远古的 ...

  7. Babel 快速入门

    目录 一. 简介 二. 安装 babel-cli 三. 代码示例 1. 初始化项目 2. 编写es6代码 3. 编写babel配置文件 4. 安装转码器 5. 转码 方式一 方式二 一. 简介 ES6 ...

  8. Babel 相关资料

    Babel online editor Babel Plugin Handbook babeljs usage options 转载于:https://www.cnblogs.com/skating/ ...

  9. babel6 babel7_当您已经准备好Babel时设置Flow

    babel6 babel7 by Jamie Kyle 杰米·凯尔(Jamie Kyle) 当您已经准备好Babel时设置Flow (Setting up Flow when you've alrea ...

最新文章

  1. 一篇文章了解Github和Git教程-AndroidStudio上传Github教程
  2. springboot学习笔记(六)
  3. linux(CentOS)下安装mongodb
  4. java addlistener_Java怎样监听文本//比如下面 y.addInputMethodListener((InputMethodListener) this);...
  5. android EditText光标位置,光标样式,EditText限制输入内容,软键盘遮挡的EditText,搜索框,限制输入表情
  6. 双网卡绑定linux7.2,CentOS 7.2 bond实现网卡聚合链路(双网卡绑定)脚本及验证(适合云平台)...
  7. 解决:Xshell如何修改默认的登录用户,自动跳转到密码界面
  8. 布局:多列等高布局方法
  9. 排序算法(三)--冒泡排序法
  10. 彻底的清除Office 以便重新安装
  11. linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号
  12. Kicad如何导入封装库、符号库(元件库)以及3D模型文件?
  13. Python深度学习入门学习路线(简单速成不掉头发)
  14. 两年数据对比柱形图_【Excel技巧】制作柱形图图表完美呈现百分比,提升您的报表颜值...
  15. 手机端输入框默认打开手机数字键盘
  16. MOD函数的使用方法
  17. 栈evaluate-reverse-polish-notation-leetcode练习题
  18. comet 简单了解
  19. 三菱触摸屏怎么改时间_三菱触摸屏时钟设置步骤
  20. Java使用aspose生成简历

热门文章

  1. ERROR: Cannot install keras==2.2.0 and tensorflow==1.14.0 because these package versions have confli
  2. 10-8 猫和狗 : 创建两个文件cats.txt和dogs.txt, 在第一个文件中至少存储三只猫的名字, 在第二个文件中至少存储三条狗的名字。 编写一个程序, 尝试读取这些文件, 并将其内容打印到
  3. 服务器发来的信息手机收不到,收不到QQ好友发来的信息
  4. 【大疆智图】| 重建三维模型
  5. Python、C、Java 和 C++ 四足鼎立,其他已无胜算? | TIOBE 10 月编程语言排行榜
  6. 深度优先搜索与宽度优先搜索
  7. 使用visio创建跨职能流程图
  8. 如何彻底禁用 werfalut.exe
  9. 新颖的基于互联网的毕业设计题目50例
  10. VSCode 格式化 cpp 文件时配置左大括号不换行