3

私のangularアプリケーションはASP.NET webapiに支えられており、index.htmlを提供しており、angularはそこから他のすべてを処理しています。バンドルを使用したいのですが、これを行う方法がわかりません。バンドルを参照するためだけにかみそり (または Web フォーム) を使用する必要がありますか? または、バンドル出力に、src/hrefs で参照できる固定名を付けるオプションはありますか?

明確にするために、私はHTMLを提供するためにMVCまたはWebフォームを使用していません。index.html にリダイレクトされるだけで、ルーティングはすべてクライアント側で行われます。私のバンドル構成は、WebActivator.PostApplicationStartMethod を使用して行われます。

4

1 に答える 1

1

まず、質問に答えるだけで、html ファイル内のプレーン リンクを使用できます。

<script src='bundles/mybundle' type='text/javascript' language='text/javascript'></script>  

=> これにより、JavaScript バンドルがページに含まれます

このアプローチの問題点は、バンドルに含まれる *.js ファイルを変更すると、その変更がバンドルに反映されないことです。これはすべて、ASP.NETの優れた機能である「バンドルキャッシュバスティング」に関するものですが、かみそりテンプレートからのみ使用できます...明らかに、プールも再起動します(ただし、これは非常に遅く、自動化が困難です):)

この問題を回避するには、次のように独自の ASP.NET MVC コントローラーを定義します。

using System.Linq;
using System.Web.Mvc;
using System.Web.Optimization;

namespace Controllers
{
    public class DebugBundlesController : Controller
    {
        // GET: debugbundles/mybundle
        public ActionResult Mybundle()
        {
            return InlineBundleJavaScript("~/bundles/mybundle");
        }

        private ActionResult InlineBundleJavaScript(string bundlePath)
        {
            //see https://blog.mariusschulz.com/2015/10/25/inlining-css-and-javascript-bundles-with-asp-net-mvc
            var bundleContext = new BundleContext(HttpContext, BundleTable.Bundles, "~/bundles");
            var bundle = BundleTable.Bundles.Single(b => b.Path == bundlePath);
            var js = bundle.GenerateBundleResponse(bundleContext).Content;
            return JavaScript(js);
        }
    }
}

そして、あなたはそれを次のように使用します:

<script src='debugbundles/mybundle' type='text/javascript' language='text/javascript'></script>

=> これで、変更を加えるたびに、バンドルが再生成されます。

バンドルのほぼすべての利点 (つまり、特にクライアントとサーバーのキャッシュ) を削除するため、これは開発中にのみ使用するように注意してください。

于 2015-12-29T09:20:48.653 に答える