使用ASP.NET Web Optimization Framework
,我正在尝试加载一些javascript文件。它工作正常,除了我遇到加载顺序,加载速度或执行的特殊情况。我无法弄清楚哪个。
基本上,我正在使用ace
代码编辑器来实现javascript,我还希望包含它的自动完成包。这需要两个文件。
/ace.js
/ext-language_tools.js
这不是问题,如果我以正常方式加载这两个文件(使用<script>
标签),它可以正常工作。但是当我尝试使用网络优化捆绑包时,似乎出现了问题。
试试这个......
bundles.Add(new ScriptBundle("~/bundles/js") {
.Include("~/js/ace.js")
.Include("~/js/ext-language_tools.js")
});
然后在视图中..
@Scripts.Render("~/bundles/js")
我收到错误
ace未定义
这意味着ace.js
文件尚未运行或未加载。因为如果我将它分成两个包,它就会开始工作。
bundles.Add(new ScriptBundle("~/bundles/js") {
.Include("~/js/ace.js")
});
bundles.Add(new ScriptBundle("~/bundles/js/language_tools") {
.Include("~/js/ext-language_tools.js")
});
有谁可以解释为什么这会以这种方式表现?
答案 0 :(得分:1)
MSDN Magazine: Programming CSS: Bundling and Minification中详细说明了这一点(滚动到更多高级捆绑功能部分)。
摘录(我加粗了一些文字):
特别是, BundleCollection 类有一些值得一提的功能,即使它们在捆绑脚本文件而不是CSS文件时非常有用。
第一个功能是订购。 BundleCollection类有一个名为Orderer的属性,类型为 IBundleOrderer 。尽管看起来很明显,但是,订购者是一个组件,负责确定您希望将文件捆绑下载的实际顺序。默认订货人是 DefaultBundleOrderer 类。此类按照通过FileSetOrderList设置的设置(BundleCollection的属性)生成的顺序捆绑文件。 FileSetOrderList被设计为BundleFileSetOrdering类的集合。这些类中的每一个都定义了文件的模式(例如,jquery- *),并且将BundleFileSetOrdering类添加到FileSetOrderList的顺序决定了文件的实际顺序。例如,给定默认配置,所有jQuery文件始终在Modernizr文件之前捆绑。
DefaultBundleOrderer课程的来源为here。
然而,特别感兴趣的是BundleCollection班级&#39; AddDefaultFileOrderings 功能(截图如下)。
现在,回到您的问题,在您的论坛中,您有ace.js
和ext-language_tools.js
。后一个文件与ext-*
匹配,因此将始终包含在ace.js
之前的数据包中文件列表的顶部。
<强> SOLUTION:强>
已经回答HERE。
同样的解决方案也在MSDN杂志中给出(链接在顶部)。
其中描述的另一种方法是使用以下代码&#34;重置所有排序&#34;:
bundles.ResetAll();
&#34;在这种情况下,使用前面显示的默认订货人或穷人订货人的效果是相同的。但请注意,ResetAll也会重置脚本排序。&#34;