ASP.NET 4.x 网站bundle不支持ES6的解决办法
当js文件中含有async 、await等es6的语法时,webgrease的 Minify因为无法识别语法而抛出异常,造成请求bundles时出现500错误。
直接修改 System.Web.Optimization 中的JsMinify.cs 也可以完成支持,但是替换System.Web.Optimization.dll 容易导致IIS出错,而且我们也没有微软的签名。
所以,更稳妥的方式是自定义Bundle,下面是一个例子(使用VB.NET语言,如需其他语言,可自行让大语言模型(千问、DeepSeek等)帮忙转换),其中用到的Uglify.js方法,来自于NUglify的NuGet包
public class CustomScriptBundle : Bundle { public CustomScriptBundle(string virtualPath) : base(virtualPath, new IBundleTransform[] { new NoOpTransform() }) { } } public class NoOpTransform : IBundleTransform { public void Process(BundleContext context, BundleResponse response) { // 禁用压缩,仅合并文件 response.ContentType = "text/javascript"; // NUglify 压缩,只是一个示例,实际要考虑Error等情况 // response.Content = Uglify.Js(response.Content).Code } } // 注册 Bundle bundles.Add(new CustomScriptBundle("~/bundles/modern").Include("~/Scripts/*.js"));
自定义了自己的Bundle类之后,之前的bundles.Add(new ScriptBundle('~/js/a.js'))可以换成bundles.Add(new CustomScriptBundle('~/js/b.js'))就可以正确的Bundle + Minify 含有 ES6 语法的脚本了
浙公网安备 33010602011771号