ASP.net MVC缩小和捆绑 - 如何缩小单个JavaScript文件

时间:2012-06-12 21:52:27

标签: javascript asp.net-mvc

在尝试遵循不引人注目的JavaScript指南时,我将所有JavaScript从我的每个视图中移出并放入单独的.js文件中。

但是,在1个视图中,我需要动态创建一些JavaScript变量,以便将它们插入到ViewBag中并直接渲染到视图中:

    $(document).ready(function () {
        @(ViewBag.PrePop)
        @(ViewBag.PreDiscount)
    });

在我使用新的ASP.net捆绑和缩小功能之前,这很好用。

将所有这些小型外部JavaScript文件捆绑在一起,然后从每个页面调用组合脚本意味着每个页面(包含ViewBag发出的变量的页面除外)都有一个变量引用错误:

Uncaught ReferenceError: quotes is not defined 

所以这基本上意味着我无法捆绑这个特定的JavaScript文件。

但是,我想缩小它。为此,我是否只声明一个只包含一个JavaScript文件的包:

bundles.Add(new ScriptBundle("~/bundles/mypagescript").Include(
            "~/Scripts/mypagescript.js"));

还是有另一种方法可以完全缩小?

2 个答案:

答案 0 :(得分:3)

是的,目前我们并没有真正公开任何方法让你轻松调用优化只是为了缩小字符串(你可以通过JsMinify.Process的实例来实现它,如果你真的想要的话)ie:

string js = "//I am a comment\r\nfoo = bar;\r\nfoo = yes;";
JsMinify jsmin = new JsMinify();
BundleContext context = new BundleContext();
BundleResponse response = new BundleResponse(js, null);
response.Content = js;
jsmin.Process(context, response);
Assert.AreEqual("foo=bar,foo=yes", response.Content);

但你建议的可能是最好的(创建一个文件包)。

答案 1 :(得分:2)

对不起,迟到的答案;)

您可以使用Microsoft.Ajax.Utilities.Minifier。创建一个实例并调用MinifyJavaScript - 它接受一个字符串(JS代码)作为参数并返回缩小的代码。

Dim minifier As New Microsoft.Ajax.Utilities.Minifier()
minifier.MinifyJavaScript(script)

然后,您可以创建自己的HTML帮助程序或操作来调用此方法。这至少在我的情况下运作良好;)