【问题标题】:ASP.net MVC Minifying and Bundling - How to minify a single JavaScript fileASP.net MVC 缩小和捆绑 - 如何缩小单个 JavaScript 文件
【发布时间】:2012-06-12 21:52:27
【问题描述】:

为了遵守不显眼的 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"));

或者还有其他方法可以单独执行缩小吗?

【问题讨论】:

    标签: javascript asp.net-mvc


    【解决方案1】:

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

    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);
    

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

    【讨论】:

    • 我试过了,但是 System.Web.Optimization.BundleContext 的构造函数现在是:public BundleContext( HttpContextBase context, BundleCollection collection, string bundleVirtualPath )
    【解决方案2】:

    抱歉回复晚了;)

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

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

    然后您可以创建自己的 HTML 助手或操作来调用它。这至少在我的情况下效果很好;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-12
      • 2013-02-21
      • 2014-11-26
      • 2014-04-16
      • 2018-05-11
      • 2023-03-21
      • 2014-05-22
      • 2021-01-17
      相关资源
      最近更新 更多