ScriptBundle依赖项

时间:2012-10-26 08:43:57

标签: asp.net-mvc-4 asp.net-optimization

我很难让ScriptBundle正常工作(如果这应该可行的话)。我正在尝试做的是添加另一个包(jQuery)作为我的包的依赖,如下所示:

bundles.Add(new ScriptBundle("~/js/myscripts")
                    .Include("~/js/jquery",
                             "~/Content/scripts/myscript.js"));

~/js/jquery是jQuery包的“名称”(虚拟路径),注册为(在我的依赖包之前):

bundles.Add(new ScriptBundle("~/js/jquery")
                    .Include("~/Content/scripts/jquery-{version}.js"));

当我在视图中执行@Scripts.Render("~/js/myscripts")时,只会向HTML呈现myscript.js。如果我将jQuery的虚拟路径从bundle的名称中更改为物理的,现有的,它可以工作:

bundles.Add(new ScriptBundle("~/js/myscripts")
                    .Include("~/Content/scripts/jquery-{version}.js",
                             "~/Content/scripts/myscript.js"));

此外,在视图中执行@Scripts.Render("~/js/jquery")也可行。它只是引用另一个ScriptBundle的不存在的虚拟路径(名称)不起作用。这应该适用吗?如果没有,我想知道我可以在哪里发布一个错误报告,说如果它不受支持,这个场景应该抛出异常。如果它受支持,它在哪里说,为什么它不起作用?

3 个答案:

答案 0 :(得分:1)

你需要在布局(视图)中添加的依赖项是

@Scripts.Render("~/js/jquery")
@Scripts.Render("~/js/myscripts")

评论后更新:

您无法嵌套捆绑包,即无法在捆绑包中包含捆绑包,在创建父捆绑包时,该虚拟路径很可能不可用。

通常我有一个单独的jquery包(包括一些其他不经常更改的js),然后另外一个js包用于其他一切。适用于浏览器缓存。

另一方面,您是否看过requireJS,如果您正在捆绑所有内容,则不需要它,但它会使您的js文件更好地记录,因为它会使依赖项显式化

答案 1 :(得分:1)

它不受支持,但你可以拿出自己的解决方案,对吗?类似的东西:

var jquery = new[] { "~/Content/scripts/jquery-{version}.js" };
var myScripts = jquery.Concat(new[] { "~/Content/scripts/myscript.js" }).ToArray();
var myOtherScripts = myScripts.Concat(new[] { "~/Content/scripts/otherscript.js").ToArray();

bundles.Add(new ScriptBundle("~/js/jquery").Include(jquery));
bundles.Add(new ScriptBundle("~/js/myscripts").Include(myScripts));
bundles.Add(new ScriptBundle("~/js/other").Include(myOtherScripts));

答案 2 :(得分:0)

似乎这是一个不受支持的功能,所以我reported an issue就可以了。