1

概要

ASP.NET MVC アプリケーションのバンドルおよび縮小プロセスで、スクリプト ファイルを縮小する前に、スクリプト ファイル内で「検索と置換」を実行する方法はありますか?

バックグラウンド

現在のユーザーの言語に応じて、さまざまな言語に翻訳する必要がある単語を含む Javascript ファイルで定義されたウィジェットがいくつかあります。javascript ファイルは MVC によって ScriptBundles に縮小されるため、このビルド プロセスにフックすることは可能ですか? 理想的には、ローカライズされたスクリプト バンドルを作成するために使用できます。バンドル プロセスは、スクリプトが縮小される前にスクリプト内で検索/置換を実行します。

保守が困難になるため、言語ごとに個別の javascript ファイルを手動で作成することは避けたいと思います。同じことが、ウィジェットがテキストを取得するクライアント側の辞書にも当てはまります。すでに JavaScript のパフォーマンスに問題があり、フロントエンド計算の別のレイヤーを追加したくありません。

4

2 に答える 2

3

ウラジミールが言ったように、 を実装するだけで、独自のバンドル変換を作成できますIBundleTransform。私は正しい方向にあなたを指すことができるCoffeescriptsのバンドルと縮小に関するブログ投稿を書きました: http://tallmaris.com/advanced-bundling-and-minification-of-coffeescripts-in-mvc4/

要約すると、次のようなカスタム トランスフォームを作成します。

public class MultiLanguageBundler : IBundleTransform
{
    public void Process(BundleContext context, BundleResponse response)
    {
        foreach (var file in response.Files)
        {
            using (var reader = new StreamReader(file.FullName))
            {
                // "ReplaceLanguageStrings" contains the search/replace logic
                compiled += ReplaceLanguageStrings(reader.ReadToEnd());
                reader.Close();
            }
        }
        response.Content = compiled;
        response.ContentType = "text/javascript";
    }
}

次に、あなたのBundleConfig

var myBundle = new Bundle("~/Scripts/localised")
                   .Include("~/JsToLocalise/*.js"); //your JS location here, or include one by one if order is important.
myBundle.Transforms.Add(new MultiLanguageBundler());
myBundle.Transforms.Add(new JsMinify());
bundles.Add(myBundle);

いくつか微調整する必要があるかもしれませんが、それが役に立ったら教えてください。

于 2013-08-29T11:48:29.643 に答える
2

インターフェイスを実装しIBundleTransformます。例はここにあります。

于 2013-08-29T11:25:40.963 に答える