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 相关文章推荐
Firefox和IE浏览器兼容JS脚本写法小结
Jul 07 Javascript
JavaScript中关于indexOf的使用方法与问题小结
Aug 05 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
Apr 01 Javascript
javascript中的onkeyup和onkeydown区别介绍
Apr 28 Javascript
网页运行时提示对象不支持abigimage属性或方法
Aug 10 Javascript
JS采用绝对定位实现回到顶部效果完整实例
Jun 20 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
Aug 02 Javascript
javascript表单控件实例讲解
Sep 13 Javascript
全屏滚动插件fullPage.js使用实例解析
Oct 21 Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 Javascript
JavaScript屏蔽Backspace键的实现代码
Nov 02 Javascript
vue element-ui读取pdf文件的方法
Nov 26 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
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
jQuery中noconflict函数的实现原理分解
2015/02/03 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
parser.add_argument中的action使用
2020/04/20 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
表达自我的市场:Society6
2018/08/01 全球购物
教育实习生的自我评价分享
2013/11/21 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
法人身份证明书
2014/10/08 职场文书
旷课检讨书
2015/01/26 职场文书