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 jsFiddle JSBin在线调试器
Mar 14 Javascript
ECMAScript 创建自己的js类库
Nov 22 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
Apr 20 Javascript
Angular 应用技巧总结
Sep 14 Javascript
AugularJS从入门到实践(必看篇)
Jul 10 Javascript
详谈js对url进行编码和解码(三种方式的区别)
Aug 16 Javascript
利用pm2部署多个node.js项目的配置教程
Oct 22 Javascript
利用Vue2.x开发实现JSON树的方法
Jan 04 Javascript
vue 属性拦截实现双向绑定的实例代码
Oct 24 Javascript
微信小程序如何再次获取用户授权的方法
May 10 Javascript
iview form清除校验状态的实现
Sep 19 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
Jul 28 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中的静态变量的基本用法
2014/03/20 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
html数组字符串拼接的最快方法
2009/09/16 Javascript
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
jQuery解决浏览器兼容性问题案例分析
2016/04/15 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
宿舍使用违章电器检讨书
2014/01/12 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
优秀团队申报材料
2014/12/26 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书