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

@react-google-maps/api生产构建损坏 常量异常致chunk加载失败

问题根本原因

该问题和Google Maps SDK版本、@react-google-maps/api库本身的代码逻辑无关,属于生产构建环节Terser JS压缩插件的已知bug:
构建默认使用的Terser压缩插件在旧版本中存在数值字面量优化逻辑缺陷,当同时开启代码分割、内容哈希生成时,压缩过程中会错误将chunk内容哈希片段(即错误代码中出现的fa87a0d75字符串)和相邻的硬编码浮点数常量拼接,替换掉浮点数的后半段内容,最终生成不符合JS语法的非法数值,直接导致chunk解析失败、应用无法运行。
你看到的异常值-178.41fa87a0d75就是浮点数前半段+哈希片段的错误拼接产物,原本的正确值是Clusterer组件中硬编码的经纬度边界常量-178.48388434375。
之前尝试切换Google Maps版本、降级@react-google-maps/api版本没有效果,是因为这些操作都没有触发出问题的构建压缩环节,自然无法修复问题。

可行修复方案

按优先级从高到低尝试以下方案:

  • 升级构建依赖的Terser版本到5.16.0及以上。该数值拼接bug在Terser 5.16.0版本中已被正式修复,如果项目lock文件锁定了旧版本Terser,删除lock文件后重新安装依赖拉取新版本即可,不需要修改业务代码。
  • 修改压缩插件配置,关闭有风险的数值优化项。如果暂时无法升级Terser,可以调整Terser的压缩配置,关闭数值字面量改写、不安全数学计算优化:
    如果是基于Webpack的Create React App项目,可通过craco、react-app-rewired等工具修改构建配置,参考配置如下:
    module.exports = {
      webpack: {
        configure: (config) => {
          const terserPlugin = config.optimization.minimizer.find(
            plugin => plugin.constructor.name === 'TerserPlugin'
          );
          if (terserPlugin) {
            terserPlugin.options.terserOptions.compress.unsafe_math = false;
            terserPlugin.options.terserOptions.compress.numeric_literals = false;
          }
          return config;
        }
      }
    }
    
    如果是Vite项目,直接在vite.config.js的build.terserOptions.compress下添加上述两个配置项即可。
  • 临时规避:对出问题的硬编码常量做包装,避开压缩器的字面量优化。可以在项目代码中手动覆盖Clusterer的默认边界配置,把纯数值字面量改成运行时解析的值,比如将-178.48388434375改写为Number('-178.48388434375'),压缩器不会对这类动态解析的值做字面量改写,即可避免被错误拼接。
  • 排查自定义构建插件:如果项目中配置了额外的JS混淆、代码加密类插件,暂时关闭这类插件后重新构建,如果问题消失则调整对应插件的数值替换规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:57:25