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

问题原因
- start.js是React项目经打包工具(如Create React App、Vite)压缩编译后生成的产物,报错里的
...是ES6扩展运算符语法 - 旧版本Safari对ES6+语法支持不全,无法解析该运算符,因此触发语法错误
解决方案
如果你用的是Create React App
- 配置浏览器兼容范围
在项目根目录的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" ] }
- 重新打包并部署
删除旧的打包文件夹,重新执行打包命令:
rm -rf build npm run build
将新生成的build目录部署到服务器即可。
如果你用的是Vite
- 安装兼容插件
执行命令安装@vitejs/plugin-legacy:
npm install @vitejs/plugin-legacy --save-dev
- 修改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'] }) ] });
- 重新打包部署
执行打包命令生成兼容产物:
npm run build
部署新生成的dist目录。
通用检查项
- 确保服务器上部署的是重新打包后的最新文件,避免浏览器缓存旧的不兼容代码
- 若使用自定义Webpack配置,需确保已配置
@babel/preset-env并指定合适的浏览器目标,让Babel自动将ES6+语法转译为旧浏览器可识别的代码
内容的提问来源于stack exchange,提问作者Reza Shirazi
相关产品推荐
相关产品推荐

