MVC4 Bundle缩小不适用于javascript保留字

Jam*_*urz 13 javascript asp.net-mvc-4 bundling-and-minification asp.net-optimization

使用最新版本的MVC4,当它包含保留字作为键名时,我无法缩小javascript!

请参阅下面的错误,其中包含应该缩小的有效javascript.

有谁知道如何修复这个短的重写javascript使用[""]表示法?

PS有问题的代码是几千行,所以它不是一个选项!

/* Minification failed. Returning unminified contents.
(3,9-15): run-time warning JS1010: Expected identifier: delete
(4,9-13): run-time warning JS1010: Expected identifier: case
(5,9-11): run-time warning JS1010: Expected identifier: if
(3,9-15): run-time error JS1137: 'delete' is a new reserved word and should not be used as an identifier: delete
(4,9-13): run-time error JS1137: 'case' is a new reserved word and should not be used as an identifier: case
(5,9-11): run-time error JS1137: 'if' is a new reserved word and should not be used as an identifier: if
 */
var context = {};

context.delete = {};
context.case = {};
context.if = {};
Run Code Online (Sandbox Code Playgroud)

问题是没有像节点,盒式磁带,梳理,服务栈等其他选项

我们如何让MVC4用保留字来打球.

我发现很难相信,经过6个月加上没有对此的支持!

Dan*_*iel 8

刚试过这个就可以了.对不起,但丑陋的代码.它将取代您命名的成员delete及其用法.

public class CustomBundle : ScriptBundle
{
    public CustomBundle(string virtualPath) : base(virtualPath)
    {
        this.Builder = new CustomBuilder();
    }
    public CustomBundle(string virtualPath, string cdnPath) : base(virtualPath, cdnPath) {}
}

public class CustomBuilder : IBundleBuilder {
    public string BuildBundleContent(Bundle bundle, BundleContext context, IEnumerable<FileInfo> files)
    {
        var content = new StringBuilder();
        foreach (var fileInfo in files)
        {
            var parser = new Microsoft.Ajax.Utilities.JSParser(Read(fileInfo));
            parser.Settings.AddRenamePair("delete", "fooDelete");
            content.Append(parser.Parse(parser.Settings).ToCode());
            content.Append(";");
        }

        return content.ToString();
    }

    private string Read(FileInfo file)
    {
        using(var r = file.OpenText())
        {
            return r.ReadToEnd();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)