gpt4 book ai didi

asp.net-mvc - 如何指定显式 ScriptBundle 包含顺序?

转载 作者:行者123 更新时间:2023-12-03 04:59:14 32 4
gpt4 key购买 nike

我正在尝试 MVC4 System.Web.Optimization 1.0 ScriptBundle feature

我有以下配置:

public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
// shared scripts
Bundle canvasScripts =
new ScriptBundle(BundlePaths.CanvasScripts)
.Include("~/Scripts/modernizr-*")
.Include("~/Scripts/json2.js")
.Include("~/Scripts/columnizer.js")
.Include("~/Scripts/jquery.ui.message.min.js")
.Include("~/Scripts/Shared/achievements.js")
.Include("~/Scripts/Shared/canvas.js");
bundles.Add(canvasScripts);
}
}

以及以下 View :

<script type="text/javascript" src="@Scripts.Url(BundlePaths.CanvasScripts)"></script>

其中BundlePaths.CanvasScripts“~/bundles/scripts/canvas”。它呈现如下:

<script type="text/javascript" src="/bundles/scripts/canvas?v=UTH3XqH0UXWjJzi-gtX03eU183BJNpFNg8anioG14_41"></script>

到目前为止一切顺利,除了 ~/Scripts/Shared/achievements.js 是 bundle 源中的第一个脚本。它取决于 ScriptBundle 中之前包含的每个脚本。 如何确保它遵循我向包中添加 include 语句的顺序?

更新

这是一个相对较新的 ASP.NET MVC 4 应用程序,但它引用了优化框架预发布包。我删除了它并添加了来自http://nuget.org/packages/Microsoft.AspNet.Web.Optimization的RTM包。对于 web.config 中 debug=true 的 RTM 版本,@Scripts.Render("~/bundles/scripts/canvas") 以正确的顺序呈现各个脚本标记。

在 web.config 中设置 debug=false 时,组合脚本首先具有 Achievements.js 脚本,但由于它是稍后调用的函数定义(对象构造函数),因此运行时不会出现错误。也许压缩器足够聪明,能够找出依赖关系?

我还尝试了 Darin Dimitrov 建议使用带有两个调试选项的 RTM 的 IBundleOrderer 实现,并且其行为相同。

所以缩小版本并不符合我预期的顺序,但它可以工作。

最佳答案

您可以编写一个自定义 bundle 订购程序 ( IBundleOrderer ),以确保 bundle 按照您注册的顺序包含在内:

public class AsIsBundleOrderer : IBundleOrderer
{
public virtual IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
{
return files;
}
}

然后:

public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
var bundle = new Bundle("~/bundles/scripts/canvas");
bundle.Orderer = new AsIsBundleOrderer();
bundle
.Include("~/Scripts/modernizr-*")
.Include("~/Scripts/json2.js")
.Include("~/Scripts/columnizer.js")
.Include("~/Scripts/jquery.ui.message.min.js")
.Include("~/Scripts/Shared/achievements.js")
.Include("~/Scripts/Shared/canvas.js");
bundles.Add(bundle);
}
}

在您看来:

@Scripts.Render("~/bundles/scripts/canvas")

关于asp.net-mvc - 如何指定显式 ScriptBundle 包含顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11979718/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com