私はアウトしようとしている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
ます。バンドルにincludeステートメントを追加する順序を尊重するようにするにはどうすればよいですか?
更新
これは比較的新しいASP.NET MVC 4アプリケーションでしたが、最適化フレームワークのプレリリースパッケージを参照していました。私はそれを削除し、RTMパッケージをhttp://nuget.org/packages/Microsoft.AspNet.Web.Optimizationから追加しました。web.configにdebug = trueを指定したRTMバージョンを使用@Scripts.Render("~/bundles/scripts/canvas")
すると、個々のスクリプトタグが正しい順序でレンダリングされます。
web.configでdebug = falseを使用すると、結合されたスクリプトは最初にachievements.jsスクリプトを持ちますが、後で呼び出される関数定義(オブジェクトコンストラクター)があるため、エラーなしで実行されます。おそらく、ミニファイアは依存関係を理解するのに十分スマートですか?
またIBundleOrderer
、Darin DimitrovがRTMで両方のデバッグオプションを使用して提案した実装も試しましたが、動作は同じでした。
そのため、縮小版は期待どおりの順序ではありませんが、機能します。