2

这是我的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>

在我的快速配置中,我有:

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

如果我缩小,我的AngularJS代码中会出现错误:

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

如果我不缩小,一切都很好。我究竟做错了什么?

4

2 回答 2

8

尝试运行 ngmin ( https://github.com/btford/ngmin首先尝试在您的代码上

它是一个“pre-minifier”,试图确保你的所有服务都以最小安全的方式注入。您可以在此处阅读有关缩小问题的更多信息:http: //docs.angularjs.org/tutorial/step_05 (在A Note on Minification下)

简而言之,Angular 的依赖注入期望服务具有特定的名称(例如 $scope)。但是缩小器会更改这些名称以使它们更短,这会导致依赖注入(导致您看到的错误 - 这是一个放大问题的重要提示,因为错误表明它找不到服务“e” .“e”正是缩小导致的那种缩写名称)

因此,正如文档描述的那样,您可以使用类似以下的样式,其中提供者在字符串中指定(不会被缩小),然后将其注入到数组中位置的关联变量参数中,而不是按名称。

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

您可以手动执行此操作,但 ngmin 是一种自动处理所有这些的简单方法,正如 ngmin 的文档所描述的那样,转换:

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

进入最小安全:

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

在缩小过程中使用以下代码避免名称修改可能会有所帮助。

app.use(require('express-minify')({ mangle: false }));

此拉取请求中的 Github 用户发现它帮助了他们。

于 2014-07-07T07:20:49.547 回答