亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何指定明確的ScriptBundle包含順序?

如何指定明確的ScriptBundle包含順序?

慕絲7291255 2019-10-28 14:15:21
我正在嘗試MVC4 System.Web.Optimization 1.0 ScriptBundle功能。我有以下配置:public class BundleConfig{    public static void RegisterBundles(BundleCollection bundles)    {        // shared scripts        Bundle canvasScripts =            new ScriptBundle(BundlePaths.CanvasScripts)                .Include("~/Scripts/modernizr-*")                .Include("~/Scripts/json2.js")                .Include("~/Scripts/columnizer.js")                .Include("~/Scripts/jquery.ui.message.min.js")                .Include("~/Scripts/Shared/achievements.js")                .Include("~/Scripts/Shared/canvas.js");        bundles.Add(canvasScripts);    }}和以下視圖:<script type="text/javascript" src="@Scripts.Url(BundlePaths.CanvasScripts)"></script>哪里BundlePaths.CanvasScripts是"~/bundles/scripts/canvas"。它呈現如下:<script type="text/javascript" src="/bundles/scripts/canvas?v=UTH3XqH0UXWjJzi-gtX03eU183BJNpFNg8anioG14_41"></script>到目前為止一切順利,但~/Scripts/Shared/achievements.js捆綁源中的第一個腳本除外。它取決于之前包含的每個腳本ScriptBundle。我如何確保它遵循我向包中添加包含語句的順序?更新資料這是一個相對較新的ASP.NET MVC 4應用程序,但它引用了優化框架預發行包。我刪除了它,并從http://nuget.org/packages/Microsoft.AspNet.Web.Optimization添加了RTM包。對于在web.config中具有debug = true的RTM版本,@Scripts.Render("~/bundles/scripts/canvas")將以正確的順序呈現各個腳本標簽。在web.config中使用debug = false時,合并的腳本首先具有Achievements.js腳本,但是由于它是稍后調用的函數定義(對象構造函數),因此運行時沒有錯誤??s小器也許足夠聰明以找出依賴關系?我還嘗試了IBundleOrdererDarin Dimitrov建議的RTM在兩個調試選項下的實現,并且其表現相同。因此,縮小版本與我期望的順序不符,但可以正常工作。
查看完整描述

3 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

您可以編寫一個自定義的捆綁IBundleOrderer包排序器(),以確保捆綁包包含在您注冊它們的順序中:


public class AsIsBundleOrderer : IBundleOrderer

{

    public virtual IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)

    {

        return files;

    }

}

接著:


public class BundleConfig

{

    public static void RegisterBundles(BundleCollection bundles)

    {

        var bundle = new Bundle("~/bundles/scripts/canvas");

        bundle.Orderer = new AsIsBundleOrderer();

        bundle

            .Include("~/Scripts/modernizr-*")

            .Include("~/Scripts/json2.js")

            .Include("~/Scripts/columnizer.js")

            .Include("~/Scripts/jquery.ui.message.min.js")

            .Include("~/Scripts/Shared/achievements.js")

            .Include("~/Scripts/Shared/canvas.js");

        bundles.Add(bundle);

    }

}

并且在您看來:


@Scripts.Render("~/bundles/scripts/canvas")


查看完整回答
反對 回復 2019-10-28
?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

謝謝你達林。我添加了擴展方法。


internal 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/jquery").Include(

                    "~/Scripts/jquery-{version}.js",

                    "~/Scripts/jquery-migrate-{version}.js",


                    "~/Scripts/jquery.validate.js",

                    "~/Scripts/jquery.validate.messages_fr.js",

                    "~/Scripts/moon.jquery.validation-{version}.js",


                    "~/Scripts/jquery-ui-{version}.js"

                    ).ForceOrdered());


查看完整回答
反對 回復 2019-10-28
  • 3 回答
  • 0 關注
  • 752 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號