项目中用到了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/browsersli... 设置浏览器条件。
设置了完成后,还需要用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,注意:插件会在预设项之前运行;插件按第一个到最后一个正序执行;预设中设置从最后一个到第一个逆序执行,设置时注意执行顺序。

Vue+webpack+Element 兼容问题总结的更多相关文章

  1. VUE 创建element项目

    前提:电脑安装git node.js 一.右键Git Bash Here 二.$ vue init webpack element //新建一个element项目,element是文件夹名字 $ cd ...

  2. 从0开始搭建vue+webpack脚手架(二)

    接着从0开始搭建vue+webpack脚手架(一) 三.配置webpack-dev-server 1. webpack-dev-server自带一个node的服务器, 项目在服务端运行的同时可以实现热 ...

  3. Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记

    前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...

  4. vue+webpack+element-ui项目打包优化速度与app.js、vendor.js打包后文件过大

    从开通博客到现在也没写什么东西,最近几天一直在研究vue+webpack+element-ui项目打包速度优化,想把这几天的成果记录下来,可能对前端牛人来说我这技术比较菜,但还是希望给有需要的朋友提供 ...

  5. Vue+Webpack之 代码及打包优化

    本文重点介绍Vue单页面应用的优化手段: 异步加载 面切换时加loading特效 点击延迟 inline manifest 逻辑代码优化 依赖包体积优化 cdn引用 Vue代码优化 异步加载 所谓的异 ...

  6. 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

        方法使用前需了解: 来自”和“小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查该form上添加 ...

  7. 如何在vue框架中兼容IE

    IE目前已经放弃了自己的独特化,正一步步迎入互联网的主流怀抱.但迫于有用户存在,还是要兼容到IE8,9, 以上. 下面聊一下如何在vue框架中兼容IE 1.首先在index.html <meta ...

  8. vue+webpack实践

    最近使用了vue来做SPA应用,记一波学习笔记. 使用vue+webpack实现前端模块化. vuejs——轻量.学习成本低.双向绑定.无dom的操作.组件的形式编写 推荐官方文档 vue.js官方文 ...

  9. windows环境下搭建vue+webpack的开发环境

    前段时间一直在断断续续的看vue的官方文档,后来就慢慢的学习搭建vue的开发环境,已经有将近两周了,每到最后一步的时候就会报错,搞的我好郁闷,搁置了好几天,今天又接着搞vue的开发环境,终于成功了.我 ...

随机推荐

  1. vue组件父与子通信-登录窗口

    一.组件间通信(父组件    -->  子组件)步骤:①父组件在调用子组件 传值 <child-component myValue="123"> </chi ...

  2. js变量和数据类型

  3. 为什么说 Babel 将推动 JavaScript 的发展【转】

    Babel是一个转换编译器,它能将 ES6 转换成可以在浏览器中运行的代码.Babel 由来自澳大利亚的开发者Sebastian McKenzie创建.他的目标是使 Babel 可以处理 ES6 的所 ...

  4. PTA第四周作业

    一.本周完成的作业 7-2 选择法排序 (20 分) 本题要求将给定的n个整数从大到小排序后输出. 输入格式: 输入第一行给出一个不超过10的正整数n.第二行给出n个整数,其间以空格分隔. 输出格式: ...

  5. Java相关面试题总结+答案(五)

    [异常] 74. throw 和 throws 的区别? throw 是真实抛出一个异常: throws 是声明可能会抛出一个异常. 75. final.finally.finalize 有什么区别? ...

  6. JAVA总结--多线程

    一.概念 1.进程:一个具有一定独立功能的程序,关于某些数据集合,一次运行活动. 两点:1.有自己的空间存储数据:2.一个程序. 进程,是系统   进行   资源分配  和 调度  的基础单位.动态性 ...

  7. SQLServer查看及设置最大连接数

    很多时候自己本地开发会遇到 ,打开几个连接正常访问 之后就报错误,这时候需要调整sqlserver 最大连接数. 1. 查询最大连接数 SELECT value_in_useFROM sys.conf ...

  8. 垂直口风琴菜单3(jquery)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 深入理解js闭包【写的通俗易懂,很值的阅读】

    详细内容在下面这个链接里面: https://www.cnblogs.com/uedt/archive/2010/10/28/1863389.html 能写出这样的文章,定是大佬!

  10. Scala本地安装

    一.下载 https://www.scala-lang.org/download/ 这里我选择Scala2.10.4版本 二.安装 安装比较简单  和jdk类似 点击一路安装: 选择自己的路径 完成 ...