我很难让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")时,只有myscript.js被呈现给HTML.如果我将jQuery的虚拟路径从捆绑包名称中的虚拟路径更改为现有的物理路径,则可以正常工作:
bundles.Add(new ScriptBundle("~/js/myscripts")
.Include("~/Content/scripts/jquery-{version}.js",
"~/Content/scripts/myscript.js"));此外,在视图中执行@Scripts.Render("~/js/jquery")也是可行的。它只是引用了另一个不起作用的ScriptBundle的不存在的虚拟路径(名称)。这真的能行得通吗?如果没有,我想知道我可以在哪里发布一个bug报告,说如果这个场景不受支持,应该抛出一个异常。如果它被支持,它会说它在哪里,为什么它不工作?
发布于 2012-10-26 16:49:29
根据你的依赖,你要放在你的布局(视图)中的就是
@Scripts.Render("~/js/jquery")
@Scripts.Render("~/js/myscripts")在您的评论后更新:
您不能嵌套包,也就是说,您不能将包包含在包中,在创建父包时,该虚拟路径很可能不可用。
通常,我有一个单独的jquery包(包括其他一些不经常更改的js),然后再使用另一个js包来处理其他所有事情。适用于浏览器缓存。
顺便说一句,您看过requireJS吗?如果您捆绑了所有内容,那么实际上并不需要它,但它确实使js文件更好地文档化,因为它使依赖关系变得明确。
发布于 2013-11-23 02:53:34
它不受支持,但是你可以想出你自己的解决方案,对吧?类似于:
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));发布于 2012-10-26 20:05:37
看起来这是一个不受支持的特性,所以我使用了reported an issue。
https://stackoverflow.com/questions/13083607
复制相似问题