4

我正在尝试使用

http://blogs.msdn.com/b/cdndevs/archive/2012/01/23/javascript-and-css-minifying-bundling-with-the-microsoft-web-optimization-nuget-package.aspx

缩小和捆绑我的 css 和 js 文件

我能够找到的所有示例都包含它们在 masterpage / _layout 文件中的所有脚本。

我希望能够拥有一个

 @RenderSection("Script", false)

在我的 _layout 文件中并像这样从我的“子视图”中添加脚本

@section Script {
<script src="@Url.Content("~/Scripts/Configuration/Configuration.js")" type="text/javascript"></script>
}

现在我的问题是我如何动态地将文件添加到包中并强制缓存破坏?

现在我有这个

 public static void AddBundleFile(this HtmlHelper helper, string path, Type type, int index)
    {
        var bundle = BundleTable.Bundles.GetRegisteredBundles()
            .Where(b => b.TransformType == type)
            .First();

        bundle.AddFile(path);
    }

从我的“子视图”添加文件,但捆绑文件永远不会更新..

4

1 回答 1

3

我不是 100% 确定你在哪个部分有问题。听起来您想动态包含捆绑包?我真的会尽量避免使用任何动态抓取 JS 然后以任何特定顺序合并/组合它的机制。

迟早,您将需要对包含的 JS 以什么顺序进行细粒度控制。你越早解决这个问题,你的应用就越有未来的证明。令人沮丧的是,他们甚至构建了自动将所有脚本捆绑在一个文件夹中的功能,这是一个坏主意。

因此,您不得不为您的 javascript 文件和捆绑包指定包含顺序,这是非常轻微的烦恼。我们通过维护一个List<string>在应用程序启动中使用的简单来做到这一点。

现在我认为对于我们的使用,我们可以只为网站提供一个大捆绑包,但我可以看到设置指定捆绑包的能力,然后也指定捆绑包的包含顺序。最后,您只会以 aList<T>结束。

这是我们的部分脚本的样子,它允许我们在使用捆绑包或使用单独包含的 javascript 文件之间动态切换:

@if (NameSpace.UI.UseBundledResources) // set in the web.config, different per environment
{
    <script src="@Url.ContentNoCache("~/bundle.js")" type="text/javascript"></script>    
}
else
{
    foreach (var file in NameSpace.UI.JavaScriptFileNames)
    {
    <script src="@Url.ContentNoCache(file)" type="text/javascript"></script>  
    } 
}

我们的应用程序开始

var customJsFiles = NameSpace.UI.JavaScriptFileNames;
var myJSBundle = new Bundle("~/bundle.js", typeof(JsMinify));
customJsFiles.ForEach(f => myJSBundle.AddFile(f));
BundleTable.Bundles.Add(myJSBundle);
于 2012-05-24T05:24:54.547 回答