MVC4 で Bundle と Minification を試していたところ、興味深い問題に遭遇しました。私は Coffeescript を使用していますが、この@Scripts.Render()
メソッドのように機能する Render ヘルパーが必要です。
たとえば、次のバンドル構成があるとします。
new ScriptBundle("~/bundle/appfiles").Include(
"~/Scripts/app/sample.js",
"~/Scripts/app/myApp.js");
cshtml では@Scripts.Render()
、web.config のデバッグ設定に基づいて異なる結果が得られます。debug が true の場合、ファイルごとに 1 つのスクリプト タグを取得します。それ以外の場合は、バンドルされて縮小された js を返す単一のスクリプト タグを取得します。これで問題ありません。
ここで、Coffeescripts で同じことをしたいと仮定しましょう。次のようなバンドルを作成します。
new Bundle("~/bundle/appfiles", new CoffeeBundler(), new JsMinify()).Include(
"~/Scripts/app/sample.coffee",
"~/Scripts/app/myApp.coffee");
問題は@Scripts.Render()
、デバッグ中にファイルごとに 1 つのスクリプトを使用すると、まったく変換されないことです。私ができる唯一の用途はこれです:
<script type="text/javascript" src="@(BundleTable.Bundles.ResolveBundleUrl("~/bundle/appfiles"))"></script>
しかし、これは、デバッグモードであっても、すべてをまとめてから縮小します。もちろん、これは私が望んでいるものではありません。
Coffee.Render()
Scripts に似たヘルパーを作成しようとしましたが、System.Web.Optimization アセンブリの内部にある AssetManager クラスを使用します。
これをきれいな方法で行う方法についてアイデアがあるかどうか疑問に思っていました (つまり、利用可能なパブリック クラスを使用し、AssetManager コード全体をコピー アンド ペーストせず、バンドルを作成するときに派手な Directory.EnumerateFiles を実行しません)。
ありがとう!
PS: より迅速な解決策は、Mindscape Workbench を使用して、生成された js ファイルをバンドルすることであることを知っています。私は、フレームワークが持っているものを使用するものを探しています。おそらく、人々がインストールしないツールをインストールするようにチームに指示する必要もありません。お気に入り...