Javascript 关闭AngularJS中的隐式依赖项注入
我正在调试一个大型ish AngularJS项目中缺少的提供程序。错误是缺少“dProvider”。它只发生在缩小的代码版本上,这是有意义的,因为我们没有“d”控制器、工厂或服务。我很难找到导致这种情况的原因,在缩小的代码中搜索类似Javascript 关闭AngularJS中的隐式依赖项注入,javascript,angularjs,dependency-injection,Javascript,Angularjs,Dependency Injection,我正在调试一个大型ish AngularJS项目中缺少的提供程序。错误是缺少“dProvider”。它只发生在缩小的代码版本上,这是有意义的,因为我们没有“d”控制器、工厂或服务。我很难找到导致这种情况的原因,在缩小的代码中搜索类似函数(a、b、c、d)的内容,但还没有得到任何结果。有没有办法在Angular中强制只进行显式依赖项注入?似乎如果我能强制这样做,我就能在开发环境中发现问题。哇,太糟糕了 它可能是这样定义的控制器/服务 app.controller('myCtrl', functio
函数(a、b、c、d)
的内容,但还没有得到任何结果。有没有办法在Angular中强制只进行显式依赖项注入?似乎如果我能强制这样做,我就能在开发环境中发现问题。哇,太糟糕了
它可能是这样定义的控制器/服务
app.controller('myCtrl', function($scope){
...
})
而不是更安全的
app.controller('myCtrl', ['$scope', function($scope){
...
}])
我没有一个简单的答案,但也许你可以搜索函数(如果你运气好的话,你会找到罪魁祸首。如果类似的事情不起作用,源代码映射可能就是解决办法。我最终选择性地注释掉了html的部分内容,直到我确定问题发生的地方。原来是一个问题。是的!因为你可以关闭隐式依赖注入 从代码中,使用
strictDi
config属性:
angular.bootstrap(document, ['myApp'], {
strictDi: true
});
或者从模板中,使用ng strict di
指令:
<html ng-app="myApp" ng-strict-di>
在缩小过程中尝试生成一个源映射文件-这样你就可以确定缺少的提供者的名称。如果你忘记最小安全注射,可能会发生这种情况。如果你没有“d”服务,听起来你的参数好像被弄乱了。我没有想到源映射。这是个好主意,但请注意到目前为止,使用grunt生成源映射可能超出了我的能力范围。我理解为什么会出现这样的错误,我只是很难找到它。我也不相信源映射会有帮助,因为堆栈跟踪只列出angular.js中的函数,而不是我的缩小代码。谢谢,是的,这就是我所知道的n查找。该参数或与定义的依赖项数量不同的函数参数…您还可以美化缩小的代码(例如,使用jsbeautifier.org/)) 这可能有助于您确定导致问题的代码行。不过,如果我没记错的话,这个错误在您自己的代码中没有给出一行:(是的,这是主要问题。我可以从我自己的代码的缩小版本获得解决方案。但它只列出angular.js的内容。我很高兴通知您!