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

Angular库引用新服务报错及默认服务方法调用失败问题求助

Angular库服务引用问题排查与解决

问题1:TestService引用报错

报错信息:

Module not found: Error: Package path ./lib/services/test.service is not exported from package D:\Projects\Admin\node_modules\my-lib (see exports field in D:\Projects\Admin\node_modules\my-lib\package.json)

已将TestService添加到public-api.ts但问题未解决。

相关代码

TestService代码

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class TestService {

  constructor() { }

  getTest(): string{
    console.log('inside the service');
    return "This is inside the service";
  }
}

my-lib.module代码

import { NgModule } from '@angular/core';
import { myLibComponent } from './my-lib.component';


@NgModule({
  declarations: [
    myLibComponent
  ],
  imports: [
  ],
  exports: [
    myLibComponent
  ]
})
export class myLibModule { }

public-api.ts代码

export * from './lib/my-lib.service';
export * from './lib/my-lib.component';
export * from './lib/my-lib.module';
export * from './lib/services/test.service';

外部项目服务注入代码

import { TestService } from 'my-lib';
 constructor(
    private testService: TestService
  ) {}

 ngAfterViewInit(): void {
    this.testService.getTest();
  }

问题2:默认myLibService方法调用报错

编译无错误,但调用doSomething()时控制台报错:

this.myLibService.doSomething is not a function

相关代码

myLibService代码

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class myLibService {

  constructor() { }

  doSomething(){
    console.log('do something');
  }
}

外部项目AppModule代码

import { myLibModule } from 'my-lib'; 


@NgModule({
  imports: [
    myLibModule
  ]
})
export class AppModule { }

注:组件选择器<lib-myLib></lib-myLib>可正常使用。


解决方案

针对问题1:调整库的package.json导出配置

Angular库构建后,package.json的exports字段需正确配置,才能让外部项目访问库内导出内容:

  1. 打开库项目根目录的package.json,添加或修改exports字段:
{
  "exports": {
    ".": "./public-api.ts"
  }
}
  1. 重新构建库:ng build my-lib
  2. 外部项目中重新安装库(本地开发可重新执行npm link my-lib或npm install ../path/to/my-lib)

针对问题2:确保服务正确构建与导出

出现方法不存在的错误,通常是服务未正确编译或导出:

  1. 确认public-api.ts中已正确导出myLibService:
export * from './lib/my-lib.service'; // 路径需与实际文件位置匹配
  1. 重新构建库,确保编译无报错
  2. 清理外部项目缓存并重装依赖:
rm -rf node_modules package-lock.json
npm install
  1. 确保服务导入路径正确:
import { myLibService } from 'my-lib'; // 直接从库名导入,不要用相对路径

通用注意事项

  • Angular库的对外暴露完全依赖public-api.ts,所有需要外部访问的内容必须在此文件中导出
  • 本地开发使用npm link时,修改库后需重新构建并重启外部项目开发服务器,避免缓存问题
  • 服务使用providedIn: 'root'时,无需在模块中声明,但需确保库构建配置包含该服务的编译

内容的提问来源于stack exchange,提问作者Osama El-Masri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:31:10