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
相关产品推荐
相关产品推荐

