加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – System.Web.Optimization在缩小javascript时改变js文件的

发布时间:2020-12-15 22:07:14 所属栏目:百科 来源:网络整理
导读:使用System.Web.Optimization缩小文件时,我观察到一种非常奇怪的行为,我已经在使用IBundleOrderer,当我没有缩小文件时,它可以很好地保存文件顺序 public class RespectGivenBundleOrder : IBundleOrderer{ public IEnumerableBundleFile OrderFiles(BundleCo
使用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",string.Format("{0}OnTheMove_Core.js",string.Format("{0}OnTheMove_TheApplication.js",string.Format("{0}OnTheMove_JQMQueryString.js",string.Format("{0}OnTheMove_OfflineAuditing.js",string.Format("{0}OnTheMove_DatabaseManager.js",string.Format("{0}OnTheMove.js",string.Format("{0}OnTheMove_Offline.js",string.Format("{0}OnTheMove_DatabaseLoader.js",string.Format("{0}OnTheMove_DatabaseTestHelper.js",string.Format("{0}OnTheMove_SmartScriptPlayer.js",string.Format("{0}jasmine.js",string.Format("{0}jasmine-html.js",string.Format("{0}jasmine-jquery-{{version}}.js",string.Format("{0}jasmine-OnTheMove-GenericMocksAndHelpers.js",string.Format("{0}jasmine-OnTheMove-DatabaseManager-SiebelToSQL-Tests.js",string.Format("{0}jasmine-OnTheMove-TreeValidator-Tests.js",string.Format("{0}jasmine-OnTheMove-GlobalFunction-Tests.js",string.Format("{0}jasmine-OnTheMove-OnTheMove_BusinessComponent-Tests.js",string.Format("{0}jasmine-OnTheMove_DatabaseTestHelper-Tests.js",string.Format("{0}jasmine-OnTheMove_OfflineAuditing-Tests.js",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()

        );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读