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 语法的脚本了

posted @ 2025-03-24 21:08  Easy C#  阅读(29)  评论(0)    收藏  举报