You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS发布版应用在Safari浏览器无法运行,报语法错误求助

解决Safari中React发布应用的SyntaxError: Unexpected token '...'问题

你在Safari浏览器运行已发布的React应用时遇到以下错误:

(anonymous function) (start.js:1:1108)
Global Code (start.js:1:1108)
[Error] SyntaxError: Unexpected token '...'. Expected a property name.
promiseReactionJob

Safari错误提示截图

问题原因

  • start.js是React项目经打包工具(如Create React App、Vite)压缩编译后生成的产物,报错里的...是ES6扩展运算符语法
  • 旧版本Safari对ES6+语法支持不全,无法解析该运算符,因此触发语法错误

解决方案

如果你用的是Create React App

  1. 配置浏览器兼容范围
    在项目根目录的package.json中添加或修改browserslist配置,明确兼容Safari的旧版本:
"browserslist": {
  "production": [
    ">0.2%",
    "not dead",
    "not op_mini all",
    "safari >= 12"
  ],
  "development": [
    "last 1 chrome version",
    "last 1 firefox version",
    "last 1 safari version"
  ]
}
  1. 重新打包并部署
    删除旧的打包文件夹,重新执行打包命令:
rm -rf build
npm run build

将新生成的build目录部署到服务器即可。

如果你用的是Vite

  1. 安装兼容插件
    执行命令安装@vitejs/plugin-legacy:
npm install @vitejs/plugin-legacy --save-dev
  1. 修改Vite配置文件
    在vite.config.js中启用插件并设置Safari兼容目标:
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import legacy from '@vitejs/plugin-legacy';

export default defineConfig({
  plugins: [
    react(),
    legacy({
      targets: ['safari >= 12'],
      additionalLegacyPolyfills: ['regenerator-runtime/runtime']
    })
  ]
});
  1. 重新打包部署
    执行打包命令生成兼容产物:
npm run build

部署新生成的dist目录。

通用检查项

  • 确保服务器上部署的是重新打包后的最新文件,避免浏览器缓存旧的不兼容代码
  • 若使用自定义Webpack配置,需确保已配置@babel/preset-env并指定合适的浏览器目标,让Babel自动将ES6+语法转译为旧浏览器可识别的代码

内容的提问来源于stack exchange,提问作者Reza Shirazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:27:23