如何解决缩小代码中的 Angular JS Unknown Provider 错误

Posted

技术标签:

【中文标题】如何解决缩小代码中的 Angular JS Unknown Provider 错误【英文标题】:How to troubleshoot Angular JS Unknown Provider error in minified code 【发布时间】:2015-01-07 09:46:15 【问题描述】:

当应用程序在调试模式下工作时,当发布模式打开 .NET 捆绑包时,我收到 Unknown Provider 错误。问题在于有很多来源(Bootstrap UI 和除应用程序脚本之外的其他第三方控件)。我修复了几个明显的初始化程序,但这个错误似乎是指缩小的代码,通用名称:

http://errors.angularjs.org/1.2.21/$injector/unpr?p0=nProvider%20%3C-%20n

您如何解决此类问题?

【问题讨论】:

您可能在某处缺少可注入的注释。因此,angular 抱怨它找不到n 一个缩小的服务名称。也许试试ng-annotate 错误链接似乎被中继了,你不能有完整的字符串吗?否则你应该尝试使用非最小化版本的 angularjs 执行相同的代码:你将有一个明确的错误而不是链接。 是的,在开发/调试时使用未缩小的源可以切换到缩小的源进行发布 @shaunhusain,整个问题是在调试模式下没有错误 - 当代码没有被缩小时,angular 能够找到服务或它正在寻找的任何东西。 @floribon:链接是完整的,至少在控制台中显示的那样。非缩小版没有错误。 errors.angularjs.org/1.2.21/$injector/… 【参考方案1】:

找出问题的方法是一次从缩小中排除一个脚本文件,然后查看错误是否消失。该错误实际上与unknown provider "aProvider <- a" error 上的问题中的错误相似。

就我而言,有几个错误。主要是由于模态对话框控制器,类似于关于injecting modal controller dependencies的讨论。然而,它只会发生在缩小的代码中。

在模式选项中将控制器作为字符串提供的建议对我不起作用。但是声明控制器及其依赖项就成功了:

var ModalInstanceCtrl = ['$scope', '$modalInstance', 'items', 
           function ($scope, $modalInstance, items)  ... 

【讨论】:

通常这个错误:/unpr?p0=nProvider%20%3C-%20n 是由于在最小化文件时参数被重命名为“n”。 Angular 不知道任何依赖“n”,因此会引发错误。解决此问题的一种快速方法是查找未在数组中显式定义依赖关系的所有模块声明。这往往是根本原因。欲了解更多信息,请查看:ozkary.com/2015/11/…

以上是关于如何解决缩小代码中的 Angular JS Unknown Provider 错误的主要内容,如果未能解决你的问题,请参考以下文章

markdown JS框架的大小,只是缩小+缩小和压缩,(React,Angular 2,Vue,Ember)

如何仅安装 angular-ui-router.js 文件而不是 npm 的整个源代码解决方案?

如何提高 Angular2 应用程序的加载性能?

如何检测 angular.js 中的 keydown 或 keypress 事件?

如何在 Chrome 或 Safari 中的缩小 JS 函数上设置断点?

取消缩小 chrome 的堆快照