多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] * * * * * ### **一、babel 介绍** `Babel `是一个 `JavaScript `编译器,它可以将` es6`中的代码编译成目前大多数浏览器识别的`es5`代码。 例如它将以ES6代码下: ```JavaScript let test = a =>console.log(a) ``` 编译成ES5 代码: ```JavaScript "use strict"; var test = function (a){ return a } ``` 并且 babel 还支持 react的 JSX 语法 [babel中文网](https://www.babeljs.cn/) ### **二、babel 的使用方式** #### **1. 浏览器中** 在页面中引入 ```JavaScript <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> ``` 然后在 `.babelrc.` 配置文件中进行配置 #### **2. 命令使用** 首先先安装 `babel-cli` ```JavaScript npm install babel-cli --save-dev // 局部安装的 ``` 然后可以执行下面命令 **需要注意的是**:执行以下命令前也需要先在 `.babelrc. `配置文件中进行配置, 不然不会编译文件 - 在命令版中输出编译的test.js 文件 ```JavaScript npx babel test.js ``` - 将编译文件输出指定的文件 ```JavaScript $ babel example.js --out-file compiled.js # 或 $ babel example.js -o compiled.js ``` - 编译整个文件夹中的文件 ```JavaScript $ babel src --out-dir lib # 或 $ babel src -d lib ``` 另外还有一些其他的使用方法,常见的比如在webpack中使用,更多使用场景见 [官网](https://www.babeljs.cn/docs/setup/) ### **三、`.babelrc.` 配置文件** 在babel 编译es6之前需要知道该以哪种规则或条件去编译,而这些条件和编译方式我们写在`.babelrc.` 配置文件 中,也可在通过 `package.json` 来配置`.babelrc.` ,`Babel `会在正在被转录的文件的当前目录中查找一个` .babelrc` 文件。 如果不存在,它会遍历目录树,直到找到一个 `.babelrc` 文件,或一个 `package.json` 文件中有` "babel": {} `。另外我们还要下载一些相应的编译插件。 中文官网:[.babelrc 的使用方法](https://www.babeljs.cn/docs/usage/babelrc/) ```JavaScript { "presets": [], "plugins": [] } ``` #### **1. 编译插件** > 官方预设(preset), 有两种,一个是按年份(babel-preset-2017),一个是按阶段(babel-preset-stage-X)。 这主要是根据TC39 委员会ECMASCRPIT 发布流程来制定的。TC39 委员会决定,从2016年开始,每年都会发布一个版本,它包括每年期限内完成的所有功能,同时ECMAScript的版本号也按年份编制,就有了ES2016, ES2017。所以也就有了babel-present-2016, babel-preset-2017, 对每一年新增的语法进行转化。babel-preset-latest 就是把所有es2015, es2016, es2017 全部包含在一起了。 以下是4 个不同阶段的(打包的)预设: - babel-preset-stage-0 - babel-preset-stage-1 - babel-preset-stage-2 - babel-preset-stage-3 `babel-preset-latest` 编译插件是一个特殊的presets,包括了 `es2015`,`es2016`,`es2017`的插件(目前为止,以后有es2018也会包括进去)。即总是包含最新的编译插件。 由于现在浏览器对ES6 的支持度越来越高,如果我们使用`babel-preset-latest` 编译插件则会将一些本不需要的编译(大多数浏览器都支持的ES6 语法)编译成臃肿的es5语法。为此我们可以使用 `babel-preset-env`编译插件 #### **2. `.babelrc.` 的配置** 安装 `babel-preset-env`编译插件 ```JavaScript npm install -D babel-preset-env ``` 在`.babelrc.` 配置文件中进行配置,没有选项的默认行为会运行所有转换(行为与babel-preset-latest相同) ```JavaScript { "presets": [ "env", { "targets":{ "browsers": ["last 2 versions", "ie >=8 "] // 指定支持主流浏览器最新的两个版本以及IE 7+: }, "plugins":["transform-vue-jsx"], // 使用编译扩展插件,这里使用的vue扩展插件 "node": true, // 针对当前node版本进行编译 "modules": "amd" // 启用将ES6模块语法转换为另一种模块类型 } ] } ``` 当然我们还可以设置固定版本的浏览器: ```JavaScript "targets": { "chrome": 60 } ``` 支持超过市场份额5%的浏览器: ```JavaScript "targets": { "browsers": "> 5%" } ``` babel 的更多配置 [http://babeljs.io/docs/en/babel-preset-env/](http://babeljs.io/docs/en/babel-preset-env/) [参考文章](https://segmentfault.com/a/1190000008159877#articleHeader6)