使用严格注释模式查找缩小错误 -- $injector:unpr Unknown provider

Use Strict Annotation Mode to Find Minification Bugs -- $injector:unpr Unknown provider

为什么在 IIS 中托管 Angular 7/AngularJS 混合应用程序的生产版本时出现“未知提供程序:e”错误?

我有一个 Angular 7/AngularJS 混合应用程序,我是 运行。使用“npm start”在开发模式下一切运行良好。但是,在构建生产版本后,该页面给了我一个

[$injector:unpr] Unknown provider: e

错误。我只试过 运行 Angular 7 代码,效果很好。我试过调试,app.js 文件中的 angularjs 代码执行正常。当代码

时,错误似乎来自我的 app.module.ts
this.upgrade.bootstrap(document.documentElement, ['app'], { strictDi: false })"

被执行。

export class AppModule {
  constructor(private upgrade: UpgradeModule) { }
  ngDoBootstrap() {
    this.upgrade.bootstrap(document.documentElement, ['app'], { strictDi: false });
  }
}
declare var angular: any;

angular
  .module("app")
  .directive("example", downgradeComponent({ component: ExampleComponent }) as angular.IDirectiveFactory);

不确定为什么我只在生产模式下出现此错误。我已将该应用程序部署为 IIS 中的应用程序。任何帮助,将不胜感激。谢谢

在您的 angular.json 上,查看您的 "production" 对象。可能有一个 buildOptimizer 或 aot 设置可能会导致转译的 .js 出现问题。我相信代码需要缩小变量 ("e") 但在执行时,代码还没有被缩小。

使用严格注释模式查找缩小错误

angular.bootstrap(element, ['app'], { strictDi: false })

来自文档:

  • strictDi - disable automatic function annotation for the application. This is meant to assist in finding bugs which break minified code. Defaults to false.

AngularJS angular.bootstrap API Reference


如何从 HTML

启用严格注释模式
<body ng-app="app" ng-strict-di="true">
   <!-- ... -->
</body>

来自文档:

  • ngStrictDi (optional) boolean
    if this attribute is present on the app element, the injector will be created in "strict-di" mode. This means that the application will fail to invoke functions which do not use explicit function annotation (and are thus unsuitable for minification), as described in the Dependency Injection guide, and useful debugging info will assist in tracking down the root of these bugs.

AngularJS ng-app Directive API Reference

有关更多信息,请参阅