You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅在--prod模式下出现No provider for t错误的排查求助

解决Angular "No provider for t!" 错误

首先,这个错误是Angular依赖注入系统找不到某个服务/类的提供者导致的,而错误里的t是代码压缩混淆后的变量名,得先找到它对应的真实服务才能解决问题。下面是具体的排查步骤:

1. 定位真实的依赖项

因为生产环境的代码会被压缩混淆,变量名被替换成了t,所以第一步要还原它的原始名称:

  • 用Source Map反混淆:找到你的vendor.96643eaf6ee79e7b894d.bundle.js对应的.map文件,借助浏览器开发者工具的Source Map功能(Chrome/Firefox的DevTools默认开启),点击错误栈里的文件路径,就能跳转到未混淆的源码,看到t对应的真实类名。
  • 临时关闭压缩:在开发环境(ng serve)下重现错误,开发环境不会混淆变量名,错误信息会直接显示具体是哪个服务缺失。

2. 检查依赖的提供方式

找到真实的服务后,按以下场景排查:

  • 根注入的服务:确认服务类的@Injectable()装饰器里是否配置了{ providedIn: 'root' },比如:
    @Injectable({
      providedIn: 'root' // 根级别提供,全应用可用
    })
    export class YourRealService {}
    
    如果没加这个配置,要确保在根模块(比如AppModule)的providers数组里声明了该服务。
  • 模块级服务:如果服务是在某个功能模块里提供的,要确保使用该服务的组件所在模块,已经导入了这个功能模块,或者在当前模块的providers里注册了服务。
  • 组件级服务:如果服务是组件专属的,要检查组件的providers数组是否包含这个服务。

3. 常见的排查误区

  • 检查服务的导入路径是否正确,有没有拼写错误;
  • 懒加载模块里的服务,如果需要在其他模块使用,要确保它被标记为根注入,或者通过共享模块导出;
  • 排查是否存在循环依赖(比如A服务依赖B,B又依赖A),这种情况也会触发类似的注入失败错误。

原始错误信息

vendor.96643eaf6ee79e7b894d.bundle.js:1 ERROR Error: No provider for t!
at x (vendor.96643eaf6ee79e7b894d.bundle.js:1)
at S (vendor.96643eaf6ee79e7b894d.bundle.js:1)
at t._throwOrNull (vendor.96643eaf6ee79e7b894d.bundle.js:1)
at t._getByKeyDefault (vendor.96643eaf6ee79e7b894d.bundle.js:1)
at t._getByKey (vendor.96643eaf6ee79e7b894d.bundle.js:1)
at t....

内容的提问来源于stack exchange,提问作者Jordan Lowe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:47:26