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

MVC启用BundleTable.EnableOptimizations时JS读取资源文件报错求助

解决jQuery Impromptu在Bundle压缩时的报错问题

这个问题我之前也碰到过,根源在于你用了ES6的计算属性名语法(也就是{ [Resource.Res_Option_Yes]: true }这种写法),而ASP.NET默认的JS压缩器(Microsoft Ajax Minifier)对ES6语法的支持很有限,启用BundleTable.EnableOptimizations = true后,压缩器识别不了这种语法,就会抛出"Minification failed"的错误。

下面给你几个可行的解决办法:

1. 改成ES5兼容的写法(最简单直接)

把计算属性名的写法换成ES5支持的方式,先创建空对象再动态添加属性,这样压缩器就能正常处理了:

// 先定义按钮对象
var confirmButtons = {};
confirmButtons[Resource.Res_Option_Yes] = true;
confirmButtons[Resource.Res_Option_No] = false;

// 再调用prompt方法
$.prompt(Resource.DeleteConfirm, { 
  buttons: confirmButtons, 
  submit: function (e, v, m, f) { 
    if (!v) { 
      return; 
    } else { 
      // 这里写你确认后的逻辑
    } 
  } 
});

2. 升级压缩器以支持ES6语法

如果不想改代码,想继续用ES6特性,可以替换掉默认的压缩器,使用支持ES6+的工具:

  • 安装NuGet包BuildBundlerMinifier,这个工具支持现代JS语法的压缩
  • 在项目根目录创建bundleconfig.json,配置你的JS bundle规则(比如指定要压缩的文件、输出路径等)
  • 之后启用Bundle优化时,就会用这个新工具来压缩,不会再因为ES6语法报错

3. 排除这段代码不参与Bundle压缩

临时应急的话,可以把这段包含Impromptu调用的脚本直接写在.cshtml页面里(不要放到Bundle的JS文件中),这样它不会被Bundle压缩处理,也就不会触发报错。不过这种方式不推荐长期用,毕竟Bundle的优化还是很有用的。

改完之后记得测试一下:启用BundleTable.EnableOptimizations = true,运行项目,看看提示框正常显示、压缩也不报错就没问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:51:18