Asp.net
強制 ASP.Net MVC Bundle 以特定順序呈現 javascript 文件
我正在開發一個 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標籤,而無需為每個文件使用單獨的包” - 請注意,單獨的連結標籤僅在調試模式下發生。在發布模式下部署後,將只有一個連結標籤和一個文件。