Vue+webpack+Element 兼容问题总结(小结)


Posted in Javascript onAugust 16, 2018

项目中用到了Vue.js和Elenment-UI

Vue官方文档中给出明确范围:Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。但它支持所有兼容 ECMAScript 5 的浏览器。

而且Element-UI支持IE10+及大多数浏览器。由此要用到Babel,主要用于将ECMAScript 2015+代码转换为旧浏览器或环境中向后兼容的JavaScript版本。在此之前,需要先搞清楚IE6~11是否支持es5:

  • 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,然后构建可以表示转换后代码的字符串。

下面总结Babel的使用:

1、由于项目使用了webpack打包工具,安装

npm install --save-dev babel-loader babel-core

2、在webpack.config.js中设置

module: {
  rules: [
   {
    test: /\.js$/,
    loader: "babel-loader",
    include: [
     resolve("src"),
     resolve("test"),
    ],
   },Ï
  ]
}

可以根据webpack中Module的选项来配置相应内容

3、在根目录下创建.babelrc文件来添加插件,文件添加成功后,可以开始配置内容

首先,可以使用evn预设置,它支持ES2015+的转换

npm install babel-preset-env --save-dev

在.babelrc文件中

{
"presets":["evn"]

}

如果没有任何配置选项,babel-preset-env的行为与babel-preset-latest(或babel-preset-es2015、babel-preset-es2016和babel-preset-es2017一起)完全相同。

当然,还有可选的选项可以配置,例如:

[
   "env",
   {
    "modules": false,
    "targets": {
     "browsers": ["> 1%", "last 2 versions"]
    }
   }
   "stage-2"
  ],

evn中设置项所代表的意思:

  • targets.node 支持到哪个版本的
  • node targets.browsers 支持到哪个版本的浏览器
  • loose 启动宽松模式,配合 webpack 的 loader 使用
  • modules 使用何种模块加载机制
  • debug 开启调试模式
  • include 包含哪些文件
  • exclude 排除哪些文件
  • useBuiltIns 是否对 babel-polyfill 进行分解,只引入所需的部分

targets.browsers是参考browserslist https://github.com/browserslist/browserslist设置浏览器条件。

设置了完成后,还需要用babel-polyfill来实现浏览器不能支持的原生代码,在浏览器引入了相应的polyfill后,可以用新的内置对象比如 Promise 或者 WeakMap, 静态方法比如 Array.from 或者 Object.assign, 实例方法比如 Array.prototype.includes。但是因为babel-polyfill是在原型链上直接添加方法,会污染全局变量,项目打包以后体积增大。

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,注意:插件会在预设项之前运行;插件按第一个到最后一个正序执行;预设中设置从最后一个到第一个逆序执行,设置时注意执行顺序。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript selection的兼容性写法介绍
Dec 20 Javascript
深入探寻javascript定时器
Jan 02 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
Jul 29 Javascript
基于 Node.js 实现前后端分离
Apr 23 Javascript
全面理解JavaScript中的闭包
May 12 Javascript
js获取新浪天气接口的实现代码
Jun 06 Javascript
微信小程序 for 循环详解
Oct 09 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
Dec 07 Javascript
layui实现左侧菜单点击右侧内容区显示
Jul 26 Javascript
Vue 实现输入框新增搜索历史记录功能
Oct 15 Javascript
jquery将信息遍历到界面上实例代码
Jan 21 jQuery
详解JS WebSocket断开原因和心跳机制
May 07 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
Aug 16 #Javascript
深入理解Vue 组件之间传值
Aug 16 #Javascript
JS加密插件CryptoJS实现的Base64加密示例
Aug 16 #Javascript
vue中引用swiper轮播插件的教程详解
Aug 16 #Javascript
JS加密插件CryptoJS实现的DES加密示例
Aug 16 #Javascript
JS加密插件CryptoJS实现AES加密操作示例
Aug 16 #Javascript
实例详解vue.js浅度监听和深度监听及watch用法
Aug 16 #Javascript
You might like
php cookie 登录验证示例代码
2009/03/16 PHP
paypal即时到账php实现代码
2010/11/28 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
初识Javascript小结
2015/07/16 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
python监控文件或目录变化
2016/06/07 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
互联网创业计划书的书写步骤
2014/01/28 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
简爱读书笔记
2015/06/26 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
HTML中的表单元素介绍
2022/02/28 HTML / CSS