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

更新Webpack后react-leaflet VideoOverlay.js编译遇Unexpected token错误求助

解决React项目中react-leaflet编译失败(可选链语法不支持)的问题

编译失败

./node_modules/react-leaflet/lib/VideoOverlay.js 10:25
Module parse failed: Unexpected token (10:25)
You may need an appropriate loader to handle this file type.
|   var overlay = new LeafletVideoOverlay(url, bounds, options);
|   if (options.play === true) {
>     overlay.getElement()?.play();
|   }
|   return createElementObject(overlay, extendContext(ctx, {

项目更新Webpack后出现上述错误,已尝试删除重装依赖、更新browserslist无效,package.json配置如下:

{
  "name": "frontend",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@types/leaflet": "^1.9.3",
    "@types/react": "^18.2.6",
    "gsap": "^3.11.5",
    "leaflet": "^1.9.4",
    "react-google-recaptcha": "^2.1.0",
    "react-leaflet": "^4.2.1",
    "react-leaflet-core": "^2.1.1",
    "react-leaflet-markercluster": "^3.0.0-rc1",
    "react-page-scroll-progress-bar": "^3.0.1",
    "react-scrollmagic-r18": "^1.0.3",
    "video-react": "^0.16.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not op_mini all"
  ],
  "devDependencies": {
    "webpack": "^4.28.3"
  }
}

问题根源

错误中的?.是ES2020的可选链操作符,你的Webpack 4环境未配置转译第三方依赖(react-leaflet)的babel规则——默认react-scripts不会处理node_modules里的代码,导致新语法无法被解析。

可行解决方案

方案1:用react-app-rewired扩展babel配置

  • 安装依赖:
    npm install --save-dev react-app-rewired customize-cra @babel/plugin-proposal-optional-chaining @babel/plugin-proposal-nullish-coalescing-operator
    
  • 项目根目录新建config-overrides.js:
    const { override, addBabelPlugins, addExternalBabelPlugins } = require('customize-cra');
    
    module.exports = override(
      // 给项目代码添加语法支持插件
      addBabelPlugins(
        '@babel/plugin-proposal-optional-chaining',
        '@babel/plugin-proposal-nullish-coalescing-operator'
      ),
      // 给第三方依赖添加插件,转译react-leaflet代码
      addExternalBabelPlugins(
        '@babel/plugin-proposal-optional-chaining',
        '@babel/plugin-proposal-nullish-coalescing-operator'
      )
    );
    
  • 修改package.json的scripts:
    "scripts": {
      "start": "react-app-rewired start",
      "build": "react-app-rewired build",
      "test": "react-app-rewired test",
      "eject": "react-scripts eject"
    }
    

方案2:降级react-leaflet到兼容版本

react-leaflet 3.x版本未使用可选链语法,可直接降级适配现有环境:

npm install react-leaflet@3.2.5 react-leaflet-core@1.1.0

方案3:升级Webpack 5(适配react-scripts)

react-scripts 5.x自带Webpack 5,默认支持ES2020语法,无需额外配置:

  1. 卸载手动安装的Webpack(避免和react-scripts自带版本冲突):
    npm uninstall webpack
    
  2. 升级react-scripts:
    npm install react-scripts@latest
    

通用收尾操作

完成上述任一方案后,执行以下步骤确保依赖环境干净:

rm -rf node_modules package-lock.json
npm install

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:02:06