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 的浏览器中进行按需加载。

扫描二维码关注公众号,回复: 15439632 查看本文章

1.安装@vitejs/plugin-legacy

npm install  @vitejs/plugin-legacy -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'
  }
});

打包、运行到浏览器。

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

三、注意点

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

@vitejs/plugin-legacy - npm

欢迎在评论区交流。

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

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

猜你喜欢

转载自blog.csdn.net/chaoPerson/article/details/131220705