2

HEre's my index.html:

<script src="/app/bower_components/angular/angular.js"></script>
<script src="/app/bower_components/angular-route/angular-route.js"></script> 
<script src="/app/bower_components/angular-resource/angular-resource.js"></script>
<script src="/app/bower_components/angular-cookies/angular-cookies.js"></script>
<script src="/app/bower_components/angular-sanitize/angular-sanitize.js"></script>

In my express configuration, I have:

app.use(minify());
app.use('/app', express["static"](path.resolve('app')));
app.use('/public', express["static"](path.resolve('public')));

If I minify, I get an error in my AngularJS code:

 Failed to instantiate module appApp due to: [$injector:unpr] Unknown provider: e

If I don't minify, all is well. What am I doing wrong?

4

2 に答える 2

8

最初にコードでngmin ( https://github.com/btford/ngmin ) を実行してみてください。

これは、すべてのサービスが最低限安全な方法で注入されることを確認しようとする「プレミニファイア」です。縮小に関する問題の詳細については、http: //docs.angularjs.org/tutorial/step_05 (縮小に関する注意事項の下)を参照してください。

つまり、Angular の依存性注入では、サービスが特定の名前 (たとえば $scope) を持つことを想定しています。しかし、ミニファイヤはそれらの名前を短くして依存性注入をスローするように変更します(結果として、表示されているエラーが発生します-これが拡大の問題であるという大きなヒントは、エラーがサービス「e」を見つけることができないと言っているということです) . "e" は、縮小した結果の短縮名の一種です)

したがって、ドキュメントで説明されているように、次のようなスタイルを使用できます。プロバイダーは文字列で指定され (縮小されても安全です)、名前ではなく配列内の位置に関連付けられた変数パラメーターに挿入されます。

  phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', function($scope, $http) {...}]);

これは手動で行うことができますが、ngmin のドキュメントで説明されているように、次のように変換することで、これらすべてを自動的に処理する簡単な方法が ngmin です。

 angular.module('whatever').controller('MyCtrl', function ($scope, $http) { ... });

min-safe に:

 angular.module('whatever').controller('MyCtrl', ['$scope', '$http', function ($scope, $http) { ... }]);
于 2013-11-09T16:15:25.923 に答える