我在使用最小化文件时观察到一个非常特殊的行为,当System.Web.Optimization
我不缩小文件时,我已经在使用IBundleOrderer
该方法来保持文件顺序良好
public class RespectGivenBundleOrder : IBundleOrderer
{
public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
{
return files;
}
}
public static void RegisterTestingBundle(BundleCollection bundles)
{
var bundle = new ScriptBundle("~/OnTheMoveWebFiles/bundles/Testing");
bundle.Orderer = new RespectGivenBundleOrder();
bundle.Include(
string.Format("{0}jquery-{{version}}.js", baseJSFolder),
string.Format("{0}ua-parser.js", baseJSFolder),
string.Format("{0}OnTheMove_Core.js", baseJSFolder),
string.Format("{0}OnTheMove_TheApplication.js", baseJSFolder),
string.Format("{0}OnTheMove_JQMQueryString.js", baseJSFolder),
string.Format("{0}OnTheMove_OfflineAuditing.js", baseJSFolder),
string.Format("{0}OnTheMove_DatabaseManager.js", baseJSFolder),
string.Format("{0}OnTheMove.js", baseJSFolder),
string.Format("{0}OnTheMove_Offline.js", baseJSFolder),
string.Format("{0}OnTheMove_DatabaseLoader.js", baseJSFolder),
string.Format("{0}OnTheMove_DatabaseTestHelper.js", baseJSFolder),
string.Format("{0}OnTheMove_SmartScriptPlayer.js", baseJSFolder),
string.Format("{0}jasmine.js", baseJSFolder),
string.Format("{0}jasmine-html.js", baseJSFolder),
string.Format("{0}jasmine-jquery-{{version}}.js", baseJSFolder),
string.Format("{0}jasmine-OnTheMove-GenericMocksAndHelpers.js", baseJSFolder),
string.Format("{0}jasmine-OnTheMove-DatabaseManager-SiebelToSQL-Tests.js", baseJSFolder),
string.Format("{0}jasmine-OnTheMove-TreeValidator-Tests.js", baseJSFolder),
string.Format("{0}jasmine-OnTheMove-GlobalFunction-Tests.js", baseJSFolder),
string.Format("{0}jasmine-OnTheMove-OnTheMove_BusinessComponent-Tests.js", baseJSFolder),
string.Format("{0}jasmine-OnTheMove_DatabaseTestHelper-Tests.js", baseJSFolder),
string.Format("{0}jasmine-OnTheMove_OfflineAuditing-Tests.js", baseJSFolder),
string.Format("{0}jasmine-OnTheMove-JQueryExtension-Tests.js", baseJSFolder));
bundles.Add(bundle);
}
但是当我打开最小化选项时,我遇到了JavaScript错误,并且通过在chrome开发人员工具中检查了最小化文件的开头,我可以立即看到该顺序被弄乱了。
在执行var cont = new BundleResolver(BundleTable.Bundles ).GetBundleContents("~/OnTheMoveWebFiles/bundles/Testing")
我的即时窗口中,我得到
Count = 23
[0]: "~/OnTheMoveWebFiles/js/jquery-1.7.1.js"
[1]: "~/OnTheMoveWebFiles/js/ua-parser.js"
[2]: "~/OnTheMoveWebFiles/js/OnTheMove_Core.js"
[3]: "~/OnTheMoveWebFiles/js/OnTheMove_TheApplication.js"
[4]: "~/OnTheMoveWebFiles/js/OnTheMove_JQMQueryString.js"
[5]: "~/OnTheMoveWebFiles/js/OnTheMove_OfflineAuditing.js"
[6]: "~/OnTheMoveWebFiles/js/OnTheMove_DatabaseManager.js"
[7]: "~/OnTheMoveWebFiles/js/OnTheMove.js"
[8]: "~/OnTheMoveWebFiles/js/OnTheMove_Offline.js"
[9]: "~/OnTheMoveWebFiles/js/OnTheMove_DatabaseLoader.js"
[10]: "~/OnTheMoveWebFiles/js/OnTheMove_DatabaseTestHelper.js"
[11]: "~/OnTheMoveWebFiles/js/OnTheMove_SmartScriptPlayer.js"
[12]: "~/OnTheMoveWebFiles/js/jasmine.js"
[13]: "~/OnTheMoveWebFiles/js/jasmine-html.js"
[14]: "~/OnTheMoveWebFiles/js/jasmine-jquery-1.7.0.js"
[15]: "~/OnTheMoveWebFiles/js/jasmine-OnTheMove-GenericMocksAndHelpers.js"
[16]: "~/OnTheMoveWebFiles/js/jasmine-OnTheMove-DatabaseManager-SiebelToSQL-Tests.js"
[17]: "~/OnTheMoveWebFiles/js/jasmine-OnTheMove-TreeValidator-Tests.js"
[18]: "~/OnTheMoveWebFiles/js/jasmine-OnTheMove-GlobalFunction-Tests.js"
[19]: "~/OnTheMoveWebFiles/js/jasmine-OnTheMove-OnTheMove_BusinessComponent-Tests.js"
[20]: "~/OnTheMoveWebFiles/js/jasmine-OnTheMove_DatabaseTestHelper-Tests.js"
[21]: "~/OnTheMoveWebFiles/js/jasmine-OnTheMove_OfflineAuditing-Tests.js"
[22]: "~/OnTheMoveWebFiles/js/jasmine-OnTheMove-JQueryExtension-Tests.js"
这表明订单已被保留,但是当我将订单最小化(var contents =BundleManager.GetBundleContents("~/OnTheMoveWebFiles/bundles/Testing");
)时,我得到了
"function TheApplication(){return window.onTheMove.theApplication}function decodeQueryString(n,t,i,r){var f,u={},s,h,e,o;if(i||(i=function(){return}),...
这只是开始,OnTheMove_TheApplication.js
并非jquery-1.7.1.js
我所期望的。我看到的一种解决方案是将其拆分为更多的捆绑包,并尝试以这种方式进行处理。
为什么Minifier不保留顺序?我的期望错了吗?
我设法通过创建扩展来解决此问题:
public class AsIsBundleOrderer : IBundleOrderer
{
public virtual IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
{
return files;
}
}
internal static class BundleExtensions
{
public static Bundle ForceOrdered(this Bundle sb)
{
sb.Orderer = new AsIsBundleOrderer();
return sb;
}
}
然后,您可以注册您的捆绑软件
bundles.Add(new ScriptBundle("~/bundles/home")
.Include("~/Scripts/leaflet-0.6.4.js")
.Include("~/Scripts/oms.js")
.Include("~/Scripts/home.js").ForceOrdered()
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句