离子应用程序没有find提供者在链接包

我有一个离子应用程序和angular度的Web应用程序,都消耗相同的REST API。 对于初始开发,我已经在这两个项目中复制了api实现代码,但现在我想将api服务提取到链接的npm包中,这两个项目都可以作为模块使用和导入。 该软件包编译好,但我的离子应用程序无法find包中的服务模块的提供者。

我的服务包模块看起来像这样:

import { NgModule } from '@angular/core'; import { ApiService } from './api.service'; import { AuthenticationService } from "./authentication.service"; import { CognitoUtil, CognitoCallback, LoggedInCallback } from "./cognito.service"; import { DocumentsService } from "./documents.service"; import { TagService } from "./tag.service"; import { UsersService } from "./users.service"; import { AwsUtil } from "./aws.service"; @NgModule({ declarations: [ ApiService, AuthenticationService, CognitoUtil, AwsUtil, DocumentsService, TagService, UsersService ], providers: [ AwsUtil, CognitoUtil, ApiService, AuthenticationService, ApiService, DocumentsService, TagService ] }) export class MyAppServicesModule { } 

包的index.ts文件如下所示:

 export { MyAppServicesModule } from './myapp-services.module'; 

我的tsconfig.json文件

 { "compilerOptions": { "target": "es2016", "module": "commonjs", "declaration": true, "outDir": "out", "rootDir": "src", "experimentalDecorators": true }, "exclude": [ "node_modules", "out" ] } 

的package.json

 { "name": "@myapp/services", "version": "1.0.0", "description": "My App services", "main": "index.js", "scripts": { "test": "test" }, "author": "", "license": "ISC", "devDependencies": { "@types/node": "^8.0.19", "typescript": "^2.4.2" }, "dependencies": { "@angular/core": "^4.3.3", "@angular/http": "^4.3.3", "amazon-cognito-identity-js": "^1.19.0", "rxjs": "^5.4.2" } } 

编译完包后,我将链接包

 npm link 

在我的应用程序代码中,我创build了一个链接到我的包

 npm link @myapp/services 

然后我将服务模块导入到我的主应用程序模块中

 @NgModule({ declarations: [ MyApp ], imports: [ BrowserModule, IonicModule.forRoot(MyApp), MyAppServicesModule, LoginPageModule, DocumentsPageModule, ], bootstrap: [IonicApp], entryComponents: [ MyApp ], providers: [ StatusBar, SplashScreen, {provide: ErrorHandler, useClass: IonicErrorHandler} ] }) export class AppModule {} 

在我的login页面中,我导入AuthenticationService ,并在构造函数中声明它,以便通过dependency injection器来设置

 import { AuthenticationService } from '@myapp/services' @IonicPage() @Component({ selector: 'page-login', templateUrl: 'login.html', }) export class LoginPage { constructor (public navCtrl: NavController, public navParams: NavParams, public authenticationService: AuthenticationService) {} 

但是在尝试提供我的应用程序时,出现以下错误

 typescript: src/pages/login/login.ts, line: 27 Cannot find name 'AuthenticationService'. L26: public navParams: NavParams, L27: public authenticationService: AuthenticationService) {} 

对于来自服务模块的任何提供者的所有引用,我也得到相同的错误。 我已经尝试列出在服务模块的exports部分的服务,但是这并没有解决这个问题。

我的离子版本

 Ionic Framework: 3.2.1 Ionic App Scripts: 1.3.7 Angular Core: 4.1.0 Angular Compiler CLI: 4.1.0 Node: 7.7.1 OS Platform: macOS Sierra Navigator Platform: MacIntel User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4 

谢谢

对于一个离子应用程序。 @ngModule中的大部分内容也适用于Angular:

声明 :使组件,指令和pipe道可用于不来自另一个模块的模块。 你不要把服务放在这里!

import引入你的模块需要的其他Angular模块。 BrowserModule,HttpModule,IonicModule等

entryComponents :像页面的东西

提供者 :你的服务到这里,也像StatusBar,SplashScreen,键盘,离子error handling程序…