2

我有 ASP.NET MVC 4 应用程序,其中包含一些简单的 jQuery 小部件库。现在我想允许其他 Web 应用程序使用该库。与其在客户端页面上逐个文件插入每个小部件文件,不如在一个请求时将它们全部加载为一个包。有谁知道是否可以使用 Microsoft ASP.NET Web 优化框架来做那个捆绑包?换句话说,我想准备一些“jquery-library-1.0.0.js”文件并允许其他应用程序加载它。

我能找到的只是如何在 MVC 应用程序中使用它,而没有关于如何准备带有静态名称的包。

4

3 回答 3

6

经过一些研究,我找到了如何做到这一点的方法 - 使用 IBundleTransform 接口。它允许访问捆绑内容,我只需将其转储到我想要的位置的磁盘上,然后将其用于任何其他想要使用该库的应用程序。

public class ScriptsBundleTransform : IBundleTransform
{
    public string ScriptsPath { get; set; }
    public string Version { get; set; }
    public string Minified { get; set; }
    public string Full { get; set; }

    public ScriptsBundleTransform()
    {
    }

    public ScriptsBundleTransform(string path, string version, string minified, string full)
    {
        ScriptsPath = path;
        Version = version;
        Minified = minified;
        Full = full;
    }

    public void Process(BundleContext context, BundleResponse response)
    {
        string scriptsRoot = context.HttpContext.Server.MapPath(Path.Combine(ScriptsPath, Version));

        if (!Directory.Exists(scriptsRoot))
            Directory.CreateDirectory(scriptsRoot);

        //  if minified file name specified...
        if (!string.IsNullOrEmpty(Minified))
        {
            using (TextWriter writer = File.CreateText(Path.Combine(scriptsRoot, Minified)))
            {
                writer.Write(response.Content);
            }
        }

        //  if full file name specified...
        if (!string.IsNullOrEmpty(Full))
        {
            using (Stream writer = File.OpenWrite(Path.Combine(scriptsRoot, Full)))
            {
                foreach (var file in response.Files)
                {
                    file.VirtualFile.Open().CopyTo(writer);
                }
            }
        }
    }
}

之后,我只需要将包配置中的这个转换器添加到我想要转储到磁盘的包中:

            widgets.Transforms.Add(new ScriptsBundleTransform()
            {
                Version = "1.0.0",
                ScriptsPath = "~/Scripts",
                Minified = "jquery.library.min.js",
                Full = "jquery.library.js"
            });

即使库中的任何小部件将被更改,转储文件也会自动重新生成,我没有手动控制这个过程。

于 2012-12-03T17:16:52.163 回答
0

捆绑和缩小是 Asp.Net 4.5 的新功能

您可以在此处找到更多详细信息: http ://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

因此,如果您拥有 Asp.Net 4.5 - 您拥有开箱即用的捆绑和缩小功能。(您尚未指定构建应用程序的 Asp.Net 版本)

于 2012-12-03T15:43:47.743 回答
0

我不确定您是否可以将捆绑和缩小用作独立实用程序,但您可以尝试以下方法之一:

  1. 如果您已经在项目中使用捆绑和缩小,并且在浏览器中启动页面后只想要输出 JavaScript 文件,您可以导航到文件的 URL 并下载它。

或者

  1. 您可以查看 Springboard ( https://github.com/soulwire/Springboard ) 或 Grunt ( http://gruntjs.com ) 等实用程序,尽管这两者都需要一些额外的工作才能在 Windows 上工作,因为它们的其他依赖关系。
于 2012-12-03T15:54:48.423 回答