【问题标题】:Angular Error : StaticInjectorError (Platform: core)[e -> t]:角度错误:StaticInjectorError(平台:核心)[e -> t]:
【发布时间】:2021-04-22 23:11:19
【问题描述】:

当我使用 --prod 构建 APK 时,我收到以下错误

    ERROR Error: StaticInjectorError[e -> t]: 
  StaticInjectorError(Platform: core)[e -> t]: 
    NullInjectorError: No provider for t!
    at e.get (core.js.pre-build-optimizer.js:8894)
    at core.js.pre-build-optimizer.js:9139
    at e (core.js.pre-build-optimizer.js:9083)
    at e.get (core.js.pre-build-optimizer.js:8980)
    at core.js.pre-build-optimizer.js:9139
    at e (core.js.pre-build-optimizer.js:9083)
    at e.get (core.js.pre-build-optimizer.js:8980)
    at Ua (core.js.pre-build-optimizer.js:21119)
    at e.get (core.js.pre-build-optimizer.js:21808)
    at Ts (core.js.pre-build-optimizer.js:22179)

但它与 Ionic Cordova build android 一起工作正常,它也与ng serve 一起工作;但我在ng serve --prod" 上遇到了同样的错误。

我该如何解决这个问题?

【问题讨论】:

    标签: android angular npm ionic4


    【解决方案1】:

    您正在尝试使用未在您的 AppModule 的提供者或您的 component.ts 中列出的服务。将服务添加到提供者列表以使其工作。

    如果您希望该服务是全局的(与应用上下文相关),请在 app.modules 中。

    @NgModule({
        declarations: [...],
        imports: [...],
        bootstrap: [...],
        entryComponents: [...],
        providers: [
            MyService
        ]
    })
    

    如果您希望该服务与所需组件相关联,或者在您的 component.ts 中。

    @Component({
        selector: '...',
        templateUrl: '...',
        providers: [MyService]
    })
    

    不要在两个文件中都添加它。当您在 app.modules 或组件中注入该服务时,也不要忘记导入该服务。

    import { MyService } from '../services/myservice';
    

    这个问题也可能对你有所帮助:Error: No provider for t

    【讨论】:

    • 感谢您的回复。我在发布之前已阅读“错误:没有 t 提供程序”并重新检查了我的代码..因为所有服务都已在 app.module 中定义。他们有什么办法可以检查哪些服务没有定义?我正在使用延迟加载
    • 可能是缓存问题或奇怪的问题。您可以尝试删除 node_modules,再次运行 npm install 并重新检查 qith ng server 和 --prod 标签吗?
    • 你是对的。我错过了提供者..在提交 extraMinimizers.push(new TerserPlugin({ sourceMap: scriptsSourceMap, parallel: true, cache: true, terserOptions, })); ode_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/common.js 运行 Ionic serve frontend --prod 我是这里的任务 Onesignal 提供者
    【解决方案2】:

    发生这种情况是因为您没有添加用于构建模块的服务

    示例:

    1.组件

    @Component({
      selector: 'app-sample',
      templateUrl: './sample.component.html',
      styleUrls: ['./sample.component.scss']
    })
    export class SampleComponent implements OnInit {
    
    constructor(private localServiceName: YourService) {
    }
    
      ngOnInit() {
      }
    
    }
    

    2。模块

    @NgModule({
        declarations: [SampleComponent]
    })
    

    改成

    @NgModule({
        declarations: [SampleComponent]
        providers: [ YourService ]
    })
    

    【讨论】:

      【解决方案3】:

      对于任何可能需要这个的人:

      上述原因是可能引发 StaticInjectorError 的一种情况。然而,这不是唯一的情况。在其他情况下,它可能会发生,因为您试图注入未定义的依赖项。那是: a) "Dumb case":你还没有导入服务,但是你还是注入了。大多数 IDE 会为您捕捉到这一点 b) 复杂案例:假设您有自定义库依赖于另一个库,并且您没有在每个库中设置正确的对等依赖项。这将导致模块之间的不一致(您的应用程序中同一库的不同版本)。最重要的是,如果您使用 Ahead-of-time 编译,则可能会发生您尝试导入的服务未从正确的模块(库版本)到达。这将导致 service = undefined,因此,它就像 case a)

      从我自己的经验谈起!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        • 2018-07-20
        • 2019-06-26
        • 2021-04-27
        • 2020-06-11
        • 2018-10-25
        • 1970-01-01
        相关资源
        最近更新 更多