节点模块不应直接从环境文件中读取。无法保证用户的环境文件在什么文件结构中,或者它们是否有环境文件。因此 node_module 应该与环境完全无关,而是应该在导入模块时传入一个变量。这使应用程序(及其环境文件)可以完全控制 node_module 使用的内容。
// app.module.ts
import { environment } from './environments/environment';
@NgModule({
imports: [MyNodeModule.setup(environment.myVar)]
})
export class AppModule {}
这允许用户从他们自己的环境文件中传入静态值或动态值。
更新
要使传入的值可用于您的 node_module,您可以使用 InjectionToken
export const MY_TOKEN = new InjectionToken<string>('My passed in token');
在您的MyModule 中,您提供此令牌并为其分配传入的值。
@NgModule()
export class MyNodeModule {
static setup(myToken: string) {
return {
ngModule: MyNodeModule,
providers: [{ provide: MY_TOKEN, useValue: myToken }]
}
}
}
现在你的 node_module 的其余部分要使用令牌,你可以注入它。
@Injectable()
export class SomeService {
constructor(@Inject(MY_TOKEN) private myToken){}
}
这是一个非常基本的stackblitz 演示此功能。