我很难让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
的不存在的虚拟路径(名称)不起作用。这应该适用吗?如果没有,我想知道我可以在哪里发布一个错误报告,说如果它不受支持,这个场景应该抛出异常。如果它受支持,它在哪里说,为什么它不起作用?
答案 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就可以了。