我现在宣布自己已经秃顶了,因为我一直在努力解决这个臭名昭著的问题:被压缩过的AngularJS应用程序无法运行,报错如下:
Error: [$injector:unpr] Unknown provider: aProvider <- a http://errors.angularjs.org/1.2.6/$injector/unpr?p0=aProvider%20%3C-%20a at http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:11492 at http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:26946 at Object.c [as get] (http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:26250) at http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:27041 at c (http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:26250) at Object.d [as invoke] (http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:26496) at http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:9:910 at Object.f [as forEach] (http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:11927) at http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:9:856 at j (http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:5:27235)
许多其他人也遇到了这个问题,但看起来可以通过将依赖项声明为数组而不是裸函数参数来解决,像这样:
angular.module('my-app').controller('LoginCtrl', [ '$scope', 'HttpService', function($scope, HttpService) { ... }]);
不要这样做:
angular.module('my-app').controller('LoginCtrl', function($scope, HttpService) { ... });
但在我的情况下它不起作用。我检查了所有的脚本(包括咖啡和生成的JavaScript),它们都使用了正确的数组样式声明。
问题显然不是来自于额外的包。我尝试将所有额外的包引用从 <!-- bower:js -->
块中移出(这样它们就不会被grunt缩小),但问题仍然存在。这意味着,应该是我的代码有问题…但我已经尝试了(似乎是)唯一可用的修复方法,但无济于事。
任何提示,即使是如何正确调试它?
先行致谢!
grunt serve
,应用程序就可以完美运行,没有任何错误。 - An Phan