Angular - Error: [$injector:unpr] Unknown provider: IdleProvider
Angular - Error: [$injector:unpr] Unknown provider: IdleProvider
当我的应用程序使用 dokku 部署到我们的登台服务器时,我的应用程序出现错误 Error: [$injector:unpr] Unknown provider: IdleProvider
,但是当 运行 它在我的本地计算机上时,我没有得到它。我正在使用 ng-idle 1.2.1
我发现这个问题被问过很多次,但原因总是与服务名称更改的版本 1.0.0
中所做的更改有关。我唯一能想到的是代码的缩小是问题所在,但据我所知,代码应该没问题,但我不是专家。任何帮助将不胜感激。
它是用 Coffeescript 编写的
configuration = (RestangularProvider, $logProvider, growlProvider, IdleProvider, KeepaliveProvider) ->
.
.
.
return
configuration.$inject = [
'RestangularProvider'
'$logProvider'
'growlProvider'
'IdleProvider'
'KeepaliveProvider'
]
angular
.module 'vssApp.config', [
'restangular'
]
.config configuration
编辑
在尝试在我的本地计算机上重现该问题时,我删除了下面 modules
数组中的 'ngIdle'
模块。这导致了相同的行为,所以我假设问题源于 ngIdle
模块未在此处正确加载。我仍然觉得缩小可能是导致问题的原因,但同样,我不确定为什么或如何解决它。
modules = [
'ui.router'
'ui.bootstrap'
'ui.select'
'ngAnimate'
'ngMessages'
'ngSanitize'
'ngCookies'
'smart-table'
'angularMoment'
'templates'
'angular-storage'
'angular-growl'
'vssApp.core.auth'
'vssApp.core.loading'
'ngIdle'
'cgPrompt'
'vssApp.filters'
]
runBlock.$inject = [
'$templateCache'
]
angular
.module 'vssApp.core', modules
.run runBlock
编辑 2
这是我收到的错误消息的完整输出
Error: [$injector:modulerr] Failed to instantiate module vssApp due to:
Error: [$injector:modulerr] Failed to instantiate module vssApp.config due to:
Error: [$injector:unpr] Unknown provider: IdleProvider
http://errors.angularjs.org/1.3.16/$injector/unpr?p0=IdleProvider
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:18814
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:16489
at getService (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:14903)
at Object.invoke (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:15466)
at runInvokeQueue (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13793)
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:14062
at forEach (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:19482)
at loadModules (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13587)
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13964
at forEach (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:19482)
http://errors.angularjs.org/1.3.16/$injector/modulerr?p0=vssApp.config&p1=E…net%2Fassets%2Fapplication-85a5fd382c73380bf2a71b66e581c941.js%3A3%3A19482)
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:18814
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:14406
at forEach (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:19482)
at loadModules (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13587)
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13964
at forEach (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:19482)
at loadModules (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13587)
at createInjector (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:16844)
at doBootstrap (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:28466)
at bootstrap (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:28995)
http://errors.angularjs.org/1.3.16/$injector/modulerr?p0=vssApp&p1=Error%3A…net%2Fassets%2Fapplication-85a5fd382c73380bf2a71b66e581c941.js%3A3%3A28995)
一个经验法则是在每个使用它们的地方加载模块依赖项。这允许将它们解耦。这消除了服务提供商注入的竞争条件。
如果应用看起来像这样
angular.module('vssApp', ['vssApp.config', 'ngIdle', ...])..
angular.module('vssApp.config', ['restangular'])...
Idle
服务的服务提供商在加载 vssApp.config
模块时未定义。
虽然这
angular.module('vssApp', ['ngIdle', 'vssApp.config', ...])
angular.module('vssApp.config', ['restangular'])...
避免竞争条件,但仍然指示代码味道。
应该是
angular.module('vssApp.config', ['restangular', 'ngIdle'])...
此问题仅适用于服务提供商和配置阶段。可以为任何模块顺序注入服务实例。
终于找到原因和解决办法了,好像是bower的问题。
这是一个 Rails 应用程序,所以我在 bower.json
文件中指定了 ng-idle 1.2.1
但由于某些原因,在使用 Dokku 和最后一个部署应用程序时忽略了 bower 文件安装版本 0.3.5
仍然存在,这意味着仍然使用 1.0.0 ng-idle
之前的服务命名约定,其中所有服务名称都以 $
开头。这导致 Unknown provider: IdleProvider
错误,因为 $IdleProvider
是实际的服务名称。
最后我不得不连接到 docker 容器并删除并重新安装所有 Bower 组件。 运行 bower update
作为部署的一部分由于某种原因还不够。当我有更多时间时,我会调查导致此行为的原因,并会在此处报告。
当我的应用程序使用 dokku 部署到我们的登台服务器时,我的应用程序出现错误 Error: [$injector:unpr] Unknown provider: IdleProvider
,但是当 运行 它在我的本地计算机上时,我没有得到它。我正在使用 ng-idle 1.2.1
我发现这个问题被问过很多次,但原因总是与服务名称更改的版本 1.0.0
中所做的更改有关。我唯一能想到的是代码的缩小是问题所在,但据我所知,代码应该没问题,但我不是专家。任何帮助将不胜感激。
它是用 Coffeescript 编写的
configuration = (RestangularProvider, $logProvider, growlProvider, IdleProvider, KeepaliveProvider) ->
.
.
.
return
configuration.$inject = [
'RestangularProvider'
'$logProvider'
'growlProvider'
'IdleProvider'
'KeepaliveProvider'
]
angular
.module 'vssApp.config', [
'restangular'
]
.config configuration
编辑
在尝试在我的本地计算机上重现该问题时,我删除了下面 modules
数组中的 'ngIdle'
模块。这导致了相同的行为,所以我假设问题源于 ngIdle
模块未在此处正确加载。我仍然觉得缩小可能是导致问题的原因,但同样,我不确定为什么或如何解决它。
modules = [
'ui.router'
'ui.bootstrap'
'ui.select'
'ngAnimate'
'ngMessages'
'ngSanitize'
'ngCookies'
'smart-table'
'angularMoment'
'templates'
'angular-storage'
'angular-growl'
'vssApp.core.auth'
'vssApp.core.loading'
'ngIdle'
'cgPrompt'
'vssApp.filters'
]
runBlock.$inject = [
'$templateCache'
]
angular
.module 'vssApp.core', modules
.run runBlock
编辑 2
这是我收到的错误消息的完整输出
Error: [$injector:modulerr] Failed to instantiate module vssApp due to:
Error: [$injector:modulerr] Failed to instantiate module vssApp.config due to:
Error: [$injector:unpr] Unknown provider: IdleProvider
http://errors.angularjs.org/1.3.16/$injector/unpr?p0=IdleProvider
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:18814
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:16489
at getService (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:14903)
at Object.invoke (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:15466)
at runInvokeQueue (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13793)
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:14062
at forEach (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:19482)
at loadModules (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13587)
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13964
at forEach (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:19482)
http://errors.angularjs.org/1.3.16/$injector/modulerr?p0=vssApp.config&p1=E…net%2Fassets%2Fapplication-85a5fd382c73380bf2a71b66e581c941.js%3A3%3A19482)
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:18814
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:14406
at forEach (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:19482)
at loadModules (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13587)
at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13964
at forEach (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:19482)
at loadModules (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13587)
at createInjector (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:16844)
at doBootstrap (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:28466)
at bootstrap (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:28995)
http://errors.angularjs.org/1.3.16/$injector/modulerr?p0=vssApp&p1=Error%3A…net%2Fassets%2Fapplication-85a5fd382c73380bf2a71b66e581c941.js%3A3%3A28995)
一个经验法则是在每个使用它们的地方加载模块依赖项。这允许将它们解耦。这消除了服务提供商注入的竞争条件。
如果应用看起来像这样
angular.module('vssApp', ['vssApp.config', 'ngIdle', ...])..
angular.module('vssApp.config', ['restangular'])...
Idle
服务的服务提供商在加载 vssApp.config
模块时未定义。
虽然这
angular.module('vssApp', ['ngIdle', 'vssApp.config', ...])
angular.module('vssApp.config', ['restangular'])...
避免竞争条件,但仍然指示代码味道。
应该是
angular.module('vssApp.config', ['restangular', 'ngIdle'])...
此问题仅适用于服务提供商和配置阶段。可以为任何模块顺序注入服务实例。
终于找到原因和解决办法了,好像是bower的问题。
这是一个 Rails 应用程序,所以我在 bower.json
文件中指定了 ng-idle 1.2.1
但由于某些原因,在使用 Dokku 和最后一个部署应用程序时忽略了 bower 文件安装版本 0.3.5
仍然存在,这意味着仍然使用 1.0.0 ng-idle
之前的服务命名约定,其中所有服务名称都以 $
开头。这导致 Unknown provider: IdleProvider
错误,因为 $IdleProvider
是实际的服务名称。
最后我不得不连接到 docker 容器并删除并重新安装所有 Bower 组件。 运行 bower update
作为部署的一部分由于某种原因还不够。当我有更多时间时,我会调查导致此行为的原因,并会在此处报告。