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

引入含routerLink组件的已发布Angular库后出现Router无提供者错误

解决Angular类库中Router服务找不到的问题

这个错误的核心原因很可能是类库对@angular/router的依赖声明方式不对,导致类库使用的Router实例和你的应用实例不共享,所以组件找不到Router服务的提供者。

问题出在哪?

当你创建Angular类库时,像@angular/router、@angular/core这类Angular核心包,应该被标记为peerDependencies,而不是dependencies。如果类库把这些包放在dependencies里,安装类库时会额外下载一份独立的@angular/router,这就造成类库的组件和你的应用使用的是两个不同的Router实例——应用里通过RouterModule.forRoot()提供的Router服务,类库的组件根本访问不到,自然就会报"No provider for Router!"的错误。

修复步骤

  1. 修改类库的package.json
    打开类库项目的package.json,找到dependencies里的@angular/router,把它移到peerDependencies中,并指定和你的应用匹配的版本范围(比如你的应用用Angular 16,就写"^16.0.0"):

    "peerDependencies": {
      "@angular/common": "^16.0.0",
      "@angular/core": "^16.0.0",
      "@angular/router": "^16.0.0"
    }
    

    这样类库就会复用应用中已安装的@angular/router,而不是自己再装一份。

  2. 重新打包类库
    在类库项目根目录执行打包命令:

    ng build your-library-name
    
  3. 在应用中重新安装类库
    如果是本地开发的类库,可以先卸载旧的包,再重新安装本地打包后的版本(比如用npm install ../path-to-your-library/dist/your-library-name);如果是发布到npm的包,重新安装最新版本即可。

额外确认

你的类库模块和应用的配置其实都是正确的:

  • 类库模块导入RouterModule来让组件使用[routerLink]指令,这没问题(不需要改成RouterModule.forChild(),除非类库有自己的路由配置);
  • 应用里通过AppRoutingModule用RouterModule.forRoot()提供Router服务,并导出RouterModule,AppModule的导入顺序也没问题。

只要把类库的依赖声明改对,这个错误就能解决啦!

内容的提问来源于stack exchange,提问作者Andreas Teich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:27:53