1. ホーム
  2. javascript

[解決済み] ASP.NET MVC - バンドル設定順序

2023-06-12 18:04:13

質問

ASP.NET MVC 5 アプリケーションで特定のロケール (es-CL) を使用しようとしています。私は次のようなものを持っています。

  1. web.config uiculture および culture を "es-CL" に変更しました。
  2. をインストールしました。 グローバル化 jQuery.Validation.Globalize。 パッケージ
  3. ビューのデフォルト言語を変更しました。 <html lang="es-cl">
  4. 新しいBundleを作成し、適切なビューに含めました。

BundleConfig.cs :

bundles.Add(new ScriptBundle("~/bundles/jqueryval")
    .Include("~/Scripts/jquery.validate.js")
    .Include("~/Scripts/jquery.validate.unobtrusive.js"));

bundles.Add(new ScriptBundle("~/bundles/globalization")
    .Include("~/Scripts/globalize/globalize.js")
    .Include("~/Scripts/globalize/cultures/globalize.culture.es-CL.js")
    .Include("~/Scripts/jquery.validate.globalize.js"));

適切なビューで

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/globalization")
}

しかし、生成されたソースコードは以下のようになります。

<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>

<script src="/Scripts/jquery.validate.globalize.js"></script>
<script src="/Scripts/globalize/globalize.js"></script>
<script src="/Scripts/globalize/cultures/globalize.culture.es-CL.js"></script>

なお jquery.validate.globalize.js の前に読み込まれていることに注意してください。 グローバル化.js の前に読み込まれることになり、私の望むところではありません。

なぜこのようなことが起こるのでしょうか。1 つのバンドルでインクルードの順序に依存することは可能ですか、それともこの単一のスクリプトを別のバンドルに入れ、ビューで指定することを余儀なくされますか?

どのように解決するのですか?

デフォルトでは、バンドル順はワイルドカードを含む名前に対してアルファベット順です(コメントで指摘されています)。しかし、依存関係ツリーが何であるかを考えて順序を決めることもありますし、また jQuery スクリプトは一番上に配置されるようです。を実装したオブジェクトを作成する必要があります。 IBundleOrder :

class NonOrderingBundleOrderer : IBundleOrderer
{
    public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
    {
        return files;
    }
}

これで、デフォルトの並び順を防ぐことができます。さあ、使ってみましょう。

var bundle = new ScriptBundle("~/bundles/globalization")
    .Include("~/Scripts/globalize/globalize.js")
    .Include("~/Scripts/globalize/cultures/globalize.culture.es-CL.js")
    .Include("~/Scripts/jquery.validate.globalize.js");

bundle.Orderer = new NonOrderingBundleOrderer();

bundles.Add(bundle);

ref: http://stevescodingblog.co.uk/changing-the-ordering-for-single-bundles-in-asp-net-4/

さらに読むために、MikeSmithDev の質問に対する回答は、人気のあるスクリプト ライブラリのデフォルトの順序に関するさらなる洞察を提供します。

バンドル内のファイルの順序 - 既知のライブラリは何ですか?