如何使用 MVC.NET Bundle 配置文件从 js 文件中删除 console.log

How to remove console.log from js files using MVC.NET Bundle config file

我当前的捆绑配置连接所有脚本文件并将其缩小并生成单个 file.but 并没有从 js 文件中删除 console.log 行,如何添加配置以从 files.my 当前配置设置中删除 console.log()

       bundles.Add(
            new Bundle(
                "~/Scripts/js-bundle",
                new IBundleTransform[] {new JsMinify() }).Include(
            "~/Scripts/script1.js",
            "~/Scripts/script2.js",
            "~/Scripts/script3.js"))

我尝试添加 LogRemoverTransform() 但出现了一些错误

您需要通过实施 IBundleTransform 创建自己的 Bundle Transformation。您可以使用 this regex (borrowed from this question) 获取 console.logconsole.info 等的实例并将它们替换为空字符串。

public class LogRemoverTransform : IBundleTransform
{
    public void Process(BundleContext context, BundleResponse response)
    {
        var compiled = string.Empty;
        var pattern = "console.(log|debug|info|warn|error|assert|dir|dirxml|trace|group|groupEnd|time|timeEnd|profile|profileEnd|count)\((.*)\);?";

        foreach (var file in response.Files)
        {
           // read text from js file, and replace the the matched parts with empty string
            compiled += Regex.Replace(File.ReadAllText(HttpContext.Current.Server.MapPath(file.IncludedVirtualPath)), pattern, string.Empty);
        }

        response.Content = compiled;
        response.ContentType = "text/javascript";
    }
}

然后在你的 BundleConfig:

bundles.Add(new Bundle("~/Scripts/js-bundle",  new LogRemoverTransform(), new JsMinify())
                  .Include("~/Scripts/script1.js",
                           "~/Scripts/script2.js",
                           "~/Scripts/script3.js"));

如果 js 文件很大,请使用 StreamReader 而不是 File.ReadAllText()