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

ASP.net MVC Minifying and Bundling - How to minify a single JavaScript file

本文关键字:缩小 单个 JavaScript 何缩小 文件 MVC net ASP      更新时间:2023-09-26

为了保持不引人注目的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"));

还是有另一种方法可以单独执行缩小?

是的,目前我们并没有真正公开任何方法让您轻松调用优化只是为了缩小字符串(如果您真的需要,您可以通过 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);

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

很抱歉回答晚了;)

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

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

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