Vue+webpack+Element 兼容问题总结
项目中用到了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 兼容问题总结的更多相关文章
- VUE 创建element项目
前提:电脑安装git node.js 一.右键Git Bash Here 二.$ vue init webpack element //新建一个element项目,element是文件夹名字 $ cd ...
- 从0开始搭建vue+webpack脚手架(二)
接着从0开始搭建vue+webpack脚手架(一) 三.配置webpack-dev-server 1. webpack-dev-server自带一个node的服务器, 项目在服务端运行的同时可以实现热 ...
- Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...
- vue+webpack+element-ui项目打包优化速度与app.js、vendor.js打包后文件过大
从开通博客到现在也没写什么东西,最近几天一直在研究vue+webpack+element-ui项目打包速度优化,想把这几天的成果记录下来,可能对前端牛人来说我这技术比较菜,但还是希望给有需要的朋友提供 ...
- Vue+Webpack之 代码及打包优化
本文重点介绍Vue单页面应用的优化手段: 异步加载 面切换时加loading特效 点击延迟 inline manifest 逻辑代码优化 依赖包体积优化 cdn引用 Vue代码优化 异步加载 所谓的异 ...
- 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题
方法使用前需了解: 来自”和“小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查该form上添加 ...
- 如何在vue框架中兼容IE
IE目前已经放弃了自己的独特化,正一步步迎入互联网的主流怀抱.但迫于有用户存在,还是要兼容到IE8,9, 以上. 下面聊一下如何在vue框架中兼容IE 1.首先在index.html <meta ...
- vue+webpack实践
最近使用了vue来做SPA应用,记一波学习笔记. 使用vue+webpack实现前端模块化. vuejs——轻量.学习成本低.双向绑定.无dom的操作.组件的形式编写 推荐官方文档 vue.js官方文 ...
- windows环境下搭建vue+webpack的开发环境
前段时间一直在断断续续的看vue的官方文档,后来就慢慢的学习搭建vue的开发环境,已经有将近两周了,每到最后一步的时候就会报错,搞的我好郁闷,搁置了好几天,今天又接着搞vue的开发环境,终于成功了.我 ...
随机推荐
- 修改JAVA_HOME失效
在修改JDK的安装目录的情况下会出现失效的时候,因为jdk在安装的时候自己在path中添加了 C:\ProgramData\Oracle\Java\javapath 这个路径. 解决: 删除 path ...
- Java实验报告(一)&&第三周学习总结
实验报告(一) 1. 打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身.例如,153是一个“水仙花数”. 源代码: public class Main { p ...
- Maven构建SpringMVC+Mybatis项目
1.创建Maven项目时,起始是没有src/main/java.src/test/java.src/test/resources,需要修改一些配置之后,自动就会创建出来: 2.开始引入Spring+M ...
- 动画可以暂停animation-play-state
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- MySQL里null与空值的辨析
CREATE TABLE `test` ( `col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `co ...
- HDU 1009 FatMouse' Trade题解
版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...
- C#设计模式:享元模式(Flyweight Pattern)
一,什么是享元模式? 享元模式(Flyweight Pattern):采用共享技术来避免大量拥有相同内容对象的开销,主要用于减少创建对象的数量,以减少内存占用和提高性能 1,根本的思路就是对象的重用2 ...
- 1. AtomicInteger 、Unsafe 及 CAS方法的整理
本文摘自: https://blog.csdn.net/fanrenxiang/article/details/80623884 http://ifeve.com/sun-misc-unsafe/ h ...
- TensorFlow学习笔记1:graph、session和op
graph即tf.Graph(),session即tf.Session(),很多人经常将两者混淆,其实二者完全不是同一个东西. graph定义了计算方式,是一些加减乘除等运算的组合,类似于一个函数.它 ...
- 一、VS支持Vue语法
一.VS支持Vue语法