Angularjs部署Unknown provider: aProvider <- a

grunt 压缩代码后,部署发布出现下面的错误:


Error: [$injector:unpr] Unknown provider: aProvider <- a
http://errors.angularjs.org/1.2.22/$injector/unpr?p0=aProvider%20%3C-%20a
at http://192.168.129.105/scripts/97d82a51.vendor.js:3073:20
at http://192.168.129.105/scripts/97d82a51.vendor.js:3837:19
at Object.c [as get] (http://192.168.129.105/scripts/97d82a51.vendor.js:3797:59)
at http://192.168.129.105/scripts/97d82a51.vendor.js:3839:23
at c (http://192.168.129.105/scripts/97d82a51.vendor.js:3797:59)
at d (http://192.168.129.105/scripts/97d82a51.vendor.js:3808:62)
at Object.e [as instantiate] (http://192.168.129.105/scripts/97d82a51.vendor.js:3814:96)
at http://192.168.129.105/scripts/97d82a51.vendor.js:4464:38
at http://192.168.129.105/scripts/97d82a51.vendor.js:8874:29
at k (http://192.168.129.105/scripts/97d82a51.vendor.js:5157:57)


错误原因: 压缩以后,没有告诉angular如何注入,因此angular无法进行动态注入

解决办法:
1.编写所有controller/service/xx的时候用数组注入(推荐这个方式)

angular.module('MainApp').directive('about', ['$rootScope',
function ($rootScope) {
}])


2.在写完controller/service/xx以后编写注入提示

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


本文最[b]牛叉[/b]的地方来了:
光是知道如何解决这个错误是不够的,压缩代码以后,[color=blue]我们需要知道哪里代码没有认真编写,从而造成了这个错误[/color]。

解决流程:
第一步 修改Grunt编译脚本Gruntfie.js,加入

uglify:{
options : {
beautify : true,
mangle : true //混淆变量名
}
},

让代码构建的时候混淆变量名,但是不破坏代码可读性

第二步 修改angular.js 找到function annotate(fn) 加入console.warn提示

function annotate(fn) {
var $inject,
fnText,
argDecl,
last;

if (typeof fn === 'function') {
if (!($inject = fn.$inject)) {
$inject = [];
if (fn.length) {
console.warn("此函数没有注入注解,将导致编译后运行错误:",fn);


这下编译以后再发布运行,除了能看到Unknown provider错误,还能马上看到哪里的代码出现了问题。


====================
Enjoy It!
====================
Tobato 2014-09-14
====================
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值