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 相关文章推荐
jquery lazyload延迟加载技术的实现原理分析
Jan 24 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
Jan 02 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
May 04 Javascript
实现easyui的datagrid导出为excel的示例代码
Nov 10 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
Aug 16 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
Jul 18 Javascript
用vue-cli开发vue时的代理设置方法
Sep 20 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
May 10 Javascript
vue项目使用.env文件配置全局环境变量的方法
Oct 24 Javascript
js实现视图和数据双向绑定的方法分析
Feb 05 Javascript
将Vue组件库更换为按需加载的方法步骤
May 06 Javascript
vue实现禁止浏览器记住密码功能的示例代码
Feb 03 Vue.js
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 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
php中取得URL的根域名的代码
2011/03/23 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
jquery事件绑定解绑机制源码解析
2016/09/19 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
Python Queue模块详细介绍及实例
2016/12/27 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
Python虚拟环境的创建和包下载过程分析
2020/06/19 Python
django form和field具体方法和属性说明
2020/07/09 Python
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
建筑专业毕业生推荐信
2013/11/21 职场文书
年终晚会主持词
2014/03/25 职场文书
2014年医学生毕业自我鉴定
2014/03/26 职场文书
小学生交通安全寄语
2015/02/27 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js