当前位置: 首页 > Web前端 > HTML

Vue+webpack+Element兼容性总结

时间:2023-04-02 20:52:49 HTML

项目使用了Vue.js和Elenment-UIVue官方文档给出了明确的范围:Vue不支持IE8及以下版本,因为Vue使用了IE8无法模拟的ECMAScript5特性。但它支持所有ECMAScript5兼容浏览器。并且Element-UI支持IE10+和大部分浏览器。Babel用于此,主要用于将ECMAScript2015+代码翻译成旧浏览器或环境中向后兼容的JavaScript版本。在此之前,您需要了解IE6~11是否支持es5:IE6~IE8:不支持es5的所有语法;IE9:支持除ECMAScript5StrictMode之外的es5语法;IE10:支持es5的所有语法;IE?11:支持es5的所有文法和es6中const和TypedArrays的新文法,可以将同种语言的高版本规则翻译成低版本规则。翻译过程也分为三个阶段:解析、转换和生成。(1)解析步骤接收代码并输出AST(AbstractSyntaxTree),包括词法分析和句法分析两个阶段。词法分析阶段将字符串形式的代码转换为标记流。语法分析阶段会将一个token流转换成AST的形式,方便后续操作。(2)使用我们配置的plugins/presets将Parser生成的AST转换成新的AST。(3)代码生成步骤过程是先深入遍历整个AST,然后构建一个可以表示转换后代码的字符串。下面总结一下Babel的使用:1.由于项目使用了webpack打包工具,安装npminstall--save-devbabel-loaderbabel-core2.在webpack.config.js中设置module:{rules:[{test:/\.js$/,loader:"babel-loader",include:[resolve("src"),resolve("test"),],},?]}可以根据options配置相应的内容webpack中的Module3.在根目录下创建.babelrc文件,用于添加插件。文件添加成功后,就可以开始配置内容了。首先,可以使用evnpresets,支持ES2015+转换npminstallbabel-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%","last2versions"]}}"stage-2"],evn中设置项的含义:targets.node支持哪个版本的node?targets.browsers支持哪个版本的浏览器?机制debug开启调试模式include包含哪些文件exclude排除哪些文件useBuiltIns是否分解babel-polyfill只导入需要的部分targets.browsers参考browserslisthttps://github.com/browsersli...设置浏览器条件.设置完成后,需要使用babel-polyfill来实现浏览器不支持的原生代码。浏览器引入相应的polyfill后,可以使用新的内置对象如Promise或WeakMap,静态方法如Array.from或Object.assign,实例方法如Array.prototype.includes。但是因为babel-polyfill直接在原型链上添加方法,会污染全局变量,打包后项目体积会变大。如果在应用程序的入口点引入npminstall--savebabel-polyfill,则require("babel-polyfill");如果在应用程序的入口点使用ES6import语法,polyfill应该在入口点的顶部导入,以确保首先加载polyfillimport("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会原样输出代码。如果同时添加插件和预设,请注意:插件将在预设之前运行;插件按照从第一个到最后一个的顺序执行;presets设置为从最后到第一个倒序执行,设置时注意执行顺序。