摘要:项目中用到了和官方文档中给出明确范围不支持及以下版本,因为使用了无法模拟的特性。但它支持所有兼容的浏览器。词法分析阶段把字符串形式的代码转换为令牌流。语法分析阶段会把一个令牌流转换成的形式方便后续操作。利用我们配置好的把生成的转变为新的。
项目中用到了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,注意:插件会在预设项之前运行;插件按第一个到最后一个正序执行;预设中设置从最后一个到第一个逆序执行,设置时注意执行顺序。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/52854.html
摘要:项目中用到了和官方文档中给出明确范围不支持及以下版本,因为使用了无法模拟的特性。但它支持所有兼容的浏览器。词法分析阶段把字符串形式的代码转换为令牌流。语法分析阶段会把一个令牌流转换成的形式方便后续操作。利用我们配置好的把生成的转变为新的。 项目中用到了Vue.js和Elenment-UIVue官方文档中给出明确范围:Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法...
摘要:下面一步步拆解上述流程。切换至分支检测本地和暂存区是否还有未提交的文件检测本地分支是否有误检测本地分支是否落后远程分支发布发布检测到在分支上没有冲突后,立即执行。 背景 最近一直在着手做一个与业务强相关的组件库,一直在思考要从哪里下手,怎么来设计这个组件库,因为业务上一直在使用ElementUI(以下简称Element),于是想参考了一下Element组件库的设计,看看Element构...
摘要:前言一直混迹社区突然发现自己收藏了不少好文但是管理起来有点混乱所以将前端主流技术做了一个书签整理不求最多最全但求最实用。 前言 一直混迹社区,突然发现自己收藏了不少好文但是管理起来有点混乱; 所以将前端主流技术做了一个书签整理,不求最多最全,但求最实用。 书签源码 书签导入浏览器效果截图showImg(https://segmentfault.com/img/bVbg41b?w=107...
摘要:原文地址对于没有了解过的童鞋,建议先去看看官方的教程传送门新版本的新特性插件使用的插件,可以很快的搭建一个项目的结构。使用时直接引入即可。的界面让管理项目变得更加简单。如迁移过程中有任何疑问,可以留言一起探讨。 原文地址 对于没有了解过 vue-cli3 的童鞋,建议先去看看官方的教程: 传送门 新版本的新特性 1. 插件 使用 cli 的插件,可以很快的搭建一个项目的结构。如 ax...
摘要:同时增加了单元测试,使用了,增加了可视化配置权限,增加了自定义布局等等,优化了原先的权限方案,支持不刷新页面更新路由等等功能。虽然它的初衷是为了单元测试的,但正好满足了我们的需求。它会重写浏览器的对象,从而才能拦截所有请求,代理到本地。 前言 vue-element-admin 从 2017.04.17提交第一个 commit 以来,维护至今已经有两年多的时间了了,发布了四十多个版本,...
阅读 2124·2023-04-26 02:19
阅读 1915·2021-11-19 09:40
阅读 1705·2021-09-29 09:35
阅读 3576·2021-09-29 09:34
阅读 4299·2021-09-07 10:16
阅读 5537·2021-08-11 11:14
阅读 3579·2019-08-30 15:54
阅读 1631·2019-08-30 15:53