解决Vite打包React18页面在低版本浏览器的兼容性问题(Uncaught SyntaxError: Unexpected token ?)

一、问题描述

vite打包的页面在低版本浏览器上会展示空白,并报错。

Uncaught SyntaxError: Unexpected token ?

二、解决方案

步骤一:  vite.config.ts里 build.target 配置项 指定构建目标为 es2015

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

1、安装@vitejs/plugin-legacy

yarn add @vitejs/plugin-legacy -D

2、配置 vite.config.ts 

import { defineConfig } from 'vite';
import path from 'node:path';
const resolve = filepath => path.resolve(__dirname, filepath);
import reactRefresh from '@vitejs/plugin-react-refresh';
import legacy from '@vitejs/plugin-legacy';


export default defineConfig(({ mode }) => {
  return {
    ...
    build: {
      ...
      target: 'es2015',
    },
    plugins: [
      reactRefresh(),
      legacy({
        targets: ['ie >= 11', 'chrome <= 60'],
        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'
        ]
      })
    ],
  };
});

注意:
1、注意配置需要兼容的浏览器范围

targets: ['ie >= 11', 'chrome <= 60'],

2、打包构建项目时可能会遇到打包失败的问题

[vite:terser] terser not found. Since Vite v3, terser has become an optional dependency. You need to install it.

把缺少的项安装好就可以打包了

yarn add terser

参考:vite如何兼容低版本浏览器_@vitejs/plugin-legacy-CSDN博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值