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

UglifyJsPlugin致生产环境常量赋值错误的原因排查

问题根源:旧版UglifyJS压缩插件的逻辑优化bug

核心原因

你遇到的Uncaught (in promise) TypeError: Assignment to constant variable错误,本质是**uglifyjs-webpack-plugin@1.1.1版本的压缩逻辑bug**。该版本的UglifyJS在处理特定代码结构时,会错误地将函数内部的返回逻辑转换为对常量的赋值操作,导致生产构建后的代码触发语法错误。

触发条件分析

你的原始代码刚好满足触发bug的几个关键条件:

  • 使用let声明普通函数isError404,函数内部返回一个由||连接的逻辑表达式
  • 直接在if条件判断中调用该函数(无额外中间变量或调试语句)

在生产压缩阶段,UglifyJS的优化逻辑错误地将函数内的return (error.status === 404 || ...)语句,篡改为类似const xxx = error.status ===404 || ...的赋值操作,而后续逻辑又试图修改这个被错误声明为const的变量,最终抛出"赋值给常量变量"的错误。

为什么这些操作能解决问题?

  1. 替换为箭头函数:箭头函数的AST结构与普通函数不同,UglifyJS的压缩优化逻辑对箭头函数的处理路径避开了这个bug,不会生成错误的赋值代码。
  2. 添加console.log(isError404(error)):增加调试语句后,函数调用的上下文发生变化,压缩器不会触发那个错误的优化分支,因此不会生成违规的常量赋值代码。

解决方案建议

  • 升级uglifyjs-webpack-plugin到v2.x及以上版本,新版本修复了这类压缩逻辑bug
  • 如果暂时无法升级插件,可继续使用箭头函数的写法,或在函数调用前添加无副作用的语句(如空注释、无用变量声明)来避开bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:55:21