web-dev-qa-db-ja.com

Mvc4のバンドル、ミニファイ、AngularJSサービス

Asp.Net MVC4のバンドルと縮小機能がjsファイルを縮小する方法をカスタマイズする方法はありますか?

つまり、ミニファイを完全にオフにしたくはありませんが、「そのまま」では、AngularJを壊してしまいます。

AngularJsはコントローラーにサービスを注入するためにDIおよびIoCアプローチを使用するため、次のようになります。

function MyController($scope) { }

縮小されると、次のようになります。

function MyController(n) { }

通常、これは問題にはなりませんが、AngularJsはパラメーター名を使用して、注入するサービスを理解します。したがって、$ scopeは$ scopeのままにする必要があり、angularコントローラー内の他のパラメーターも同様です。ローカル変数など、他のすべては通常どおり縮小する必要があります。

Mvc4ミニファイの構成方法に関する明確なドキュメントが見つかりません。また、「オールオアナッシング」であるとは思えないので、何かが足りないと思います。

ありがとう。

27
Matteo Mosca

実際には、AngularJSコードを記述できる(そしてそうすべきです!)ので、「ミニファイセーフ」です。詳細については、 http://docs.angularjs.org/guide/di の「依存関係の注釈」セクションで説明していますが、要するに、グローバルに定義されたコントローラーの場合は、次のように記述できます。

MyController.$inject = ['$scope'];

グローバルに定義されたコントローラーがグローバル名前空間を汚染していることに注意してください(詳細については this を参照)。回避する必要があります。モジュールレベルでコントローラーを宣言すると、ミニファイセーフにすることもできます。

angular.module('mymodule', []).controller('MyController', ['$scope', function($scope){
//controller code goes here
}]);
45

それでも縮小するものと縮小しないものを制御したい場合(またはプラグインベンダーによってすでに縮小されたバージョンを含めたい場合)は、2つのバンドルを宣言し、BundleConfig.csでそのうちの1つだけを縮小します。

var dontMinify = new Bundle("~/bundles/toNotMinify").Include(
                        "~/Scripts/xxxxx.js");
bundles.Add(dontMinify);

var minify = new Bundle("~/bundles/toNotMinify").Include(
                        "~/Scripts/yyyyyy.js");
minify.Transforms.Add(new JsMinify());
bundles.Add(minify);
1
amhed

「ミニファイセーフ」なangular-DI構文を記述したくない、または記述したくない、または変数名が難読化されていることを気にしない人のために、私はBundleTransfomerをYuiJsミニファイアと一緒に使用しました。 nuget:

 Install-Package BundleTransformer.Core
 Install-Package BundleTransformer.Yui

縮小/難読化を非常にきめ細かく制御できます。 angularの世界では、yuiweb.configセクション内のobfuscateJavascriptをfalseに設定するだけです。

1
Gumzle