如何创建一个npm软件包,使其能够从导入到哪个项目的环境文件中使用baseUrl?

时间:2018-11-30 20:54:20

标签: angular

我的公司已经启动了一个私有npm软件包存储库。我正在尝试将一些常规重用的代码放入软件包中,然后可以从服务器安装这些软件包并导入到项目中。对于我们所有的项目,我们都使用环境文件以及该项目使用的任何api的基本URL的值。通常,我们会将环境文件导入服务中,并使用基本url值执行对api的调用。对于打包服务,我们无法以相同的方式做到这一点。

现在,我正在处理登录/授权包。到目前为止,我能想到的最好的方法是:

  1. 将环境文件导入登录页面的父组件中
  2. 然后使用@Input()将baseUrl值从环境文件传递到登录屏幕组件(在包内)
  3. 然后让该组件将baseUrl传递给对服务的调用(在包内部)

虽然杂乱无事,但可以。问题来了,我们还有拦截器调用服务中的函数,我觉得我想出的任何解决方案都是超级hacky,而且我觉得必须有更好的方法。

建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

我们有类似的问题。诀窍是通过模块的声明将配置注入到库中。例如,在库中,需要注入配置的模块的定义如下:

export class TestModule {
  static forRoot(moduleConfig: any): ModuleWithProviders {
    return {
      ...
      providers: [
        { provide: 'testModuleConfig', useValue: moduleConfig }
      ]
    };
  }

在库的服务中,获取配置:

constructor(
    @Inject('testModuleConfig') private ModuleConfig: any
) 

要在使用该库的应用程序中使用它,请在forRoot中传递配置:

imports: [
    TestModule.forRoot(environment.appconfig),
],

希望这会有所帮助。