MVC4 System.Web.Optimization1.0ScriptBundle機能を試しています。
私は次の構成を持っています:
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.NETMVC4アプリケーションでしたが、最適化フレームワークのプレリリースパッケージを参照していました。それを削除し、 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スクリプトが含まれますが、後で呼び出される関数定義(オブジェクトコンストラクター)であるため、エラーなしで実行されます。おそらく、ミニファイアは依存関係を理解するのに十分賢いですか?
IBundleOrderer
また、Darin Dimitrovが両方のデバッグオプションを使用してRTMで提案した実装を試しましたが、同じように動作しました。
したがって、縮小版は私が期待する順序ではありませんが、機能します。