Angular 11 库模块已导入但未在消费应用程序中使用
Angular 11 library module is imported but not used in consuming app
我正在开发一个 Angular 库来包含将在我公司的多个 Angular 项目之间共享的服务、管道、指令等。到目前为止,我已经实施了三个服务,并且图书馆项目构建得很好。但是,当我在使用该库的应用程序中导入模块时,VSCode 或控制台中没有出现错误,但我的 DOM 完全是空白。当直接在项目文件夹中导入 .ts 文件时,这些服务也能正常工作,但 Angular 文档明确指出 不 这样做,并且只从构建的文件中导入它们模块。我还确保“实用程序”模块导入在 .tsconfig 中正确映射到构建的项目文件夹。请帮忙!
这里是库模块定义:
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { ModuleWithProviders, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { UtilitiesConfig } from './interfaces/utilities-config.interface';
import { APIService } from './services/api.service';
import { AuthenticationService } from './services/authentication.service';
import { JWTService } from './services/jwt.service';
import { LogService } from './services/log.service';
@NgModule({
declarations: [],
imports: [
BrowserModule,
HttpClientModule,
],
exports: [
],
providers: [
APIService,
LogService,
AuthenticationService
]
})
export class UtilitiesModule {
public static forRoot(environment: UtilitiesConfig): ModuleWithProviders<UtilitiesModule> {
return {
ngModule: UtilitiesModule,
providers: [
{
provide: 'environment',
useValue: environment
},
{
provide: HTTP_INTERCEPTORS,
useClass: JWTService,
multi: true
},
APIService,
LogService,
AuthenticationService
]
}
}
}
这是消费应用的模块定义:
import { UtilitiesModule } from 'utilities';
let imports: any[] = [
UtilitiesModule.forRoot({
...
})
];
@NgModule({
declarations: [
...
],
providers: [
...
],
imports
})
export class ConsumerModule {
constructor(injector: Injector) {
const ConsumerElement = createCustomElement(ConsumerButtonComponent, { injector });
customElements.define('ConsumerApp', ConsumerElement);
}
ngDoBootstrap() { }
}
我终于弄清楚了这个问题。该库需要使用 npm link
进行 link 编辑,并且消费应用程序需要 link 到该库。由于我的所有项目都包含在一个 angular (npm) 工作区中,因此我不得不做一些不同的事情。
来自 angular 工作区根目录:
cd projects/utilities
npm link
cd ../.. (back to workspace root)
npm link dist/utilities
另外,在使用库、使用应用程序或两者进行开发时,请确保 运行 库处于监视模式:
cd projects/utilities
ng build --project=utilities --watch
祝你好运,我希望这对那里的人有所帮助!
我正在开发一个 Angular 库来包含将在我公司的多个 Angular 项目之间共享的服务、管道、指令等。到目前为止,我已经实施了三个服务,并且图书馆项目构建得很好。但是,当我在使用该库的应用程序中导入模块时,VSCode 或控制台中没有出现错误,但我的 DOM 完全是空白。当直接在项目文件夹中导入 .ts 文件时,这些服务也能正常工作,但 Angular 文档明确指出 不 这样做,并且只从构建的文件中导入它们模块。我还确保“实用程序”模块导入在 .tsconfig 中正确映射到构建的项目文件夹。请帮忙!
这里是库模块定义:
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { ModuleWithProviders, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { UtilitiesConfig } from './interfaces/utilities-config.interface';
import { APIService } from './services/api.service';
import { AuthenticationService } from './services/authentication.service';
import { JWTService } from './services/jwt.service';
import { LogService } from './services/log.service';
@NgModule({
declarations: [],
imports: [
BrowserModule,
HttpClientModule,
],
exports: [
],
providers: [
APIService,
LogService,
AuthenticationService
]
})
export class UtilitiesModule {
public static forRoot(environment: UtilitiesConfig): ModuleWithProviders<UtilitiesModule> {
return {
ngModule: UtilitiesModule,
providers: [
{
provide: 'environment',
useValue: environment
},
{
provide: HTTP_INTERCEPTORS,
useClass: JWTService,
multi: true
},
APIService,
LogService,
AuthenticationService
]
}
}
}
这是消费应用的模块定义:
import { UtilitiesModule } from 'utilities';
let imports: any[] = [
UtilitiesModule.forRoot({
...
})
];
@NgModule({
declarations: [
...
],
providers: [
...
],
imports
})
export class ConsumerModule {
constructor(injector: Injector) {
const ConsumerElement = createCustomElement(ConsumerButtonComponent, { injector });
customElements.define('ConsumerApp', ConsumerElement);
}
ngDoBootstrap() { }
}
我终于弄清楚了这个问题。该库需要使用 npm link
进行 link 编辑,并且消费应用程序需要 link 到该库。由于我的所有项目都包含在一个 angular (npm) 工作区中,因此我不得不做一些不同的事情。
来自 angular 工作区根目录:
cd projects/utilities
npm link
cd ../.. (back to workspace root)
npm link dist/utilities
另外,在使用库、使用应用程序或两者进行开发时,请确保 运行 库处于监视模式:
cd projects/utilities
ng build --project=utilities --watch
祝你好运,我希望这对那里的人有所帮助!