vite构建如何兼容低版本浏览器

目录

一、问题

二、解决方案

1.安装@vitejs/plugin-legacy

2.配置 vite.config.ts

三、注意点


一、问题

最近在用Vite4+Typescript+Vue3.2+SSR+React17+Angular14+qiankun微应用架构重构我的博客,在我构建上线之后发现谷歌等高版本主流浏览器运行正常,但是在公司自己操作系统的的浏览器上一直报如下的错误:Uncaught SyntaxError: Unexpected token ‘?‘

二、解决方案

经过我查看错误发现是很多低版本浏览器并不支持原生ESM导入的方式。老版本的博客使用的webpack构建的,配置了bable转义ES2015所以在低版本或者自带浏览器运行是没问题的。现在用的是vite4构建的,并没有使用bable进行转义。那vite构建怎么办呢? 

首先安装官方插件 @vitejs/plugin-legacy 来自动生成传统浏览器的 chunk 及与其相对应 ES 语言特性方面的 polyfill。兼容版的 chunk 只会在不支持原生 ESM 的浏览器中进行按需加载。

1.安装@vitejs/plugin-legacy

npm install  @vitejs/plugin-legacy -D

注意:必须安装 Terser,因为旧版插件使用 Terser 进行缩小。 

npm install  terser  -D

2.配置 vite.config.ts

 同时将vite.config.ts里 build.target 配置项 指定构建目标为 es2015

import { defineConfig } from 'vite';
import legacyPlugin from '@vitejs/plugin-legacy';
export default defineConfig({
  plugins: [
    // 浏览器兼容问题配置
    legacyPlugin({
      targets: ['defaults', 'not IE 11'],
      additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
      renderLegacyChunks: true,
      polyfills: [
        'es.symbol',
        'es.promise',
        'es.promise.finally',
        'es/map',
        'es/set',
        'es.array.filter',
        'es.array.for-each',
        'es.array.flat-map',
        'es.object.define-properties',
        'es.object.define-property',
        'es.object.get-own-property-descriptor',
        'es.object.get-own-property-descriptors',
        'es.object.keys',
        'es.object.to-string',
        'web.dom-collections.for-each',
        'esnext.global-this',
        'esnext.string.match-all'
      ]
    })
  ],
  build: {
    target: 'es2015',
    minify: 'terser',
	terserOptions: {
	  compress: {
	    //  生产环境时移除console
	    drop_console: true,
	    drop_debugger: true,
	  }
	}
  }
});
npm install  terser  -D

打包、运行到浏览器。

新版本浏览器运行正常!旧版本浏览器运行正常!yyds!

三、注意点

vue3不支持ie11,因为vite并不是只为vue服务,它是一个独立的开发服务器和打包工具,也可以为react等其他框架服务,所以这是一个思维误区,别的框架是有可能通过@vitejs/plugin-legacy支持ie11的,只是vue3的proxy不能支持。

@vitejs/plugin-legacy - npm

欢迎在评论区交流。

如果文章对你有所帮助,❤️关注+点赞❤️鼓励一下!博主会持续更新。。。。

vite4+typescript+vue3+SSR博客链接:富朝阳的博客

往期回顾

css实现元素居中的6种方法

Angular8升级至Angular13遇到的问题

前端vscode必备插件(强烈推荐)

Webpack性能优化

vite构建如何兼容低版本浏览器

前端性能优化9大策略(面试一网打尽)!

vue3.x使用prerender-spa-plugin预渲染达到SEO优化

 vite构建打包性能优化

 vue3.x使用prerender-spa-plugin预渲染达到SEO优化

 ES6实用的技巧和方法有哪些?

 css超出部分显示省略号

vue3使用i18n 实现国际化

vue3中使用prismjs或者highlight.js实现代码高亮

什么是 XSS 攻击?什么是 CSRF?什么是点击劫持?如何防御

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Vue 3是一种流行的JavaScript框架,它提供了一种简洁、高效的方式来构建用户界面。Vite是一个基于ES模块的构建工具,它专注于快速的开发体验。而TypeScript是一种静态类型检查的JavaScript超集,它可以增强代码的可读性和可维护性。 在浏览器兼容性方面,Vue 3、Vite和TypeScript都有一些要注意的事项: 1. Vue 3:Vue 3相对于Vue 2有一些重要的变化,其中一个是使用了ES模块作为默认的模块系统。这意味着在一些旧版本的浏览器中可能不被支持。为了解决这个问题,你可以使用Babel等工具进行转译,以确保Vue 3代码在目标浏览器中能够正常运行。 2. ViteVite使用ES模块作为默认的模块系统,并且利用现代浏览器的原生ES模块支持来提供快速的开发体验。然而,对于一些旧版本的浏览器,可能需要进行转译和polyfill处理。你可以使用Babel和相关插件来处理这些兼容性问题。 3. TypeScript:TypeScript可以编译为普通的JavaScript代码,并且可以在大多数现代浏览器中运行。然而,一些较旧的浏览器可能不支持所有的ES6+特性,因此你可能需要使用Babel等工具来进行转译和polyfill处理。 总结起来,为了在Vue 3、Vite和TypeScript项目中实现浏览器兼容性,你可以采取以下步骤: 1. 使用Babel:配置Babel来转译和处理目标浏览器不支持的特性。 2. 使用Polyfill:使用Polyfill来填充目标浏览器缺少的功能。 3. 针对不同浏览器版本进行测试:确保你的应用在目标浏览器中能够正常运行,并进行必要的调整和修复。 4. 参考官方文档:查阅Vue 3、Vite和TypeScript的官方文档,了解更多关于浏览器兼容性的建议和最佳实践。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

富朝阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值