Asp.net

強制 ASP.Net MVC Bundle 以特定順序呈現 javascript 文件

  • May 6, 2019

我正在開發一個 ASP.Net MVC 4 應用程序,並使用 Bundling 和 minifiction 來呈現樣式和腳本文件。

我有一個腳本文件(File A ),它在另一個文件( File B )中呼叫函式,當我使用

@Scripts.Render()方法時,它會在File B之前為File Alink渲染標籤,因此它會引發錯誤並且腳本無法正常工作。

有沒有辦法強制@Script.Render()以特定順序呈現link標籤而不為每個文件使用單獨的包????

編輯

我正在使用IncludeDirectory方法將所有腳本文件包含在該文件夾中

public class BundleConfig
{
   public static void RegisterBundles(BundleCollection bundles)
   {
       bundles.Add(new ScriptBundle("~/bundles/js").IncludeDirectory(
                   "~/Scripts/js",
                   "*.js"));
   }
}

將您自己的訂購者寫成Darin Dimitrov回答這個問題:如何指定明確的 ScriptBundle 包含順序?

public class MyBundleOrderer : IBundleOrderer
{
   public virtual IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
   {
       //any ordering logic here

       return files;
   }
}

預設情況下,捆綁將按字母順序添加腳本。它將在已知庫移動並以正確的順序添加它們(例如,它將首先放入 jQuery,然後是 jQuery-ui)。

最簡單的方法是自己訂購腳本。一種方法是將您的自定義腳本移至不同的文件夾,然後按照您想要的順序將所有腳本添加到它們自己的包中:

public class BundleConfig
{
   public static void RegisterBundles(BundleCollection bundles)
   {
       bundles.Add(new ScriptBundle("~/bundles/js").IncludeDirectory(
                   "~/Scripts/js","*.js"));

       bundles.Add(new ScriptBundle("~/bundles/myScripts").Include(
           "~/Scripts/custom/scriptB.js",
           "~/Scripts/custom/scriptA.js"));
   }
}

另一種選擇是萬用字元。此選項仍然包括將您的自定義腳本移動到它們自己的文件夾,但只有一個包():*

public class BundleConfig
{
   public static void RegisterBundles(BundleCollection bundles)
   {       
       bundles.Add(new ScriptBundle("~/bundles/js").Include(
           "~/Scripts/*.js",
           "~/Scripts/custom/scriptB.js",
           "~/Scripts/custom/scriptA.js"));
   }
}

還關於您的評論“是否有任何方法可以強制按特定順序@Script.Render()呈現link標籤,而無需為每個文件使用單獨的包” - 請注意,單獨的連結標籤僅在調試模式下發生。在發布模式下部署後,將只有一個連結標籤和一個文件。

引用自:https://stackoverflow.com/questions/14563415