项目中用到了Vue.js和Elenment-UI
Vue官方文档中给出明确范围:Vue 不支持 IE8 及如下版本,由于 Vue 使用了 IE8 没法模拟的 ECMAScript 5 特性。但它支持全部兼容 ECMAScript 5 的浏览器。
并且Element-UI支持IE10+及大多数浏览器。由此要用到Babel,主要用于将ECMAScript 2015+代码转换为旧浏览器或环境中向后兼容的JavaScript版本。在此以前,须要先搞清楚IE6~11是否支持es5:javascript
- IE6~IE8:不支持es5的全部语法;
- IE9:支持除ECMAScript 5 Strict Mode外的es5语法;
- IE10:支持es5的全部语法;
- IEÏ11:支持es5全部语法及es6中const和Typed Arrays新语法
babel能够把同种语言的高版本规则翻译成低版本规则,其转译过程也分为三个阶段:parsing、transforming、generating。(1)解析步骤接收代码并输出 AST(抽象语法树),这其中又包含两个阶段词法分析和语法分析。词法分析阶段把字符串形式的代码转换为令牌(tokens)流。语法分析阶段会把一个令牌流转换成 AST 的形式,方便后续操做。(2) 利用咱们配置好的plugins/presets把Parser生成的AST转变为新的AST。(3)代码生成步骤过程是深度优先遍历整个 AST,而后构建能够表示转换后代码的字符串。java
下面总结Babel的使用:
一、因为项目使用了webpack打包工具,安装node
npm install --save-dev babel-loader babel-core
二、在webpack.config.js中设置webpack
module: { rules: [ { test: /\.js$/, loader: "babel-loader", include: [ resolve("src"), resolve("test"), ], },Ï ] }
能够根据webpack中Module的选项来配置相应内容
三、在根目录下建立.babelrc文件来添加插件,文件添加成功后,能够开始配置内容
首先,可使用evn预设置,它支持ES2015+的转换git
npm install babel-preset-env --save-dev
在.babelrc文件中es6
{ "presets":["evn"] }
若是没有任何配置选项,babel-preset-env的行为与babel-preset-latest(或babel-preset-es201五、babel-preset-es2016和babel-preset-es2017一块儿)彻底相同。
固然,还有可选的选项能够配置,例如:github
[ "env", { "modules": false, "targets": { "browsers": ["> 1%", "last 2 versions"] } } "stage-2" ],
evn中设置项所表明的意思:web
- targets.node 支持到哪一个版本的
- node targets.browsers 支持到哪一个版本的浏览器
- loose 启动宽松模式,配合 webpack 的 loader 使用
- modules 使用何种模块加载机制
- debug 开启调试模式
- include 包含哪些文件
- exclude 排除哪些文件
- useBuiltIns 是否对 babel-polyfill 进行分解,只引入所需的部分
targets.browsers是参考browserslist https://github.com/browsersli... 设置浏览器条件。
设置了完成后,还须要用babel-polyfill来实现浏览器不能支持的原生代码,在浏览器引入了相应的polyfill后,能够用新的内置对象好比 Promise 或者 WeakMap, 静态方法好比 Array.from 或者 Object.assign, 实例方法好比 Array.prototype.includes。可是由于babel-polyfill是在原型链上直接添加方法,会污染全局变量,项目打包之后体积增大。npm
npm install --save babel-polyfill
若在应用程序的入口顶点引入,则浏览器
require("babel-polyfill")
;
若是在应用程序的入口点使用ES6的导入语法,则应该在入口点的顶部导入polyfill,以确保首先加载polyfills
import("babel-polyfill")
;
若是经过webpack.config.js,在入口处添加:
module.exports = { entry: ["babel-polyfill", "./app/js"] };
为了避免污染全局对象和内置的对象原型,能够用babel-plugin-transform-runtime,在.babelrc文件中
"plugins": [ [ "transform-runtime", { "helpers": false, "polyfill": true, "moduleName": "babel-runtime" } ], ]
插件应用于babel的转译过程,尤为是第二个阶段transforming,若是这个阶段不使用任何插件,那么babel会原样输出代码。 若是同时添加了plugins和presets,注意:插件会在预设项以前运行;插件按第一个到最后一个正序执行;预设中设置从最后一个到第一个逆序执行,设置时注意执行顺序。