从可发布的Angular库访问环境设置

时间:2019-06-08 18:22:08

标签: angular angular7 ngrx nrwl

我创建了一个基于Nx的工作区,其中有两个Shell应用程序(app1和app2)。将在这两个应用程序中重用此CoreModule库。

添加Ngrx存储根目录时,由于Shell应用程序中存在Environments文件夹,因此从库中访问环境对象时出错。

请让我知道如何将环境对象注入核心模块,以便我可以对模块进行此条件加载

!environment.production? StoreDevtoolsModule.instrument():[]

这是代码段,其中在我遇到错误时,我已将注释括起来。

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { StoreModule } from '@ngrx/store';
import { EffectsModule } from '@ngrx/effects';
import {
  APP_FEATURE_KEY,
  initialState as appInitialState,
  appReducer
} from './+state/app.reducer';
import { AppEffects } from './+state/app.effects';
import { NxModule } from '@nrwl/nx';
import { StoreDevtoolsModule } from '@ngrx/store-devtools';
// <error>
import { environment } from '../environments/environment';
// </error>
import { storeFreeze } from 'ngrx-store-freeze';

@NgModule({
  imports: [
    CommonModule,
    NxModule.forRoot(),
    StoreModule.forRoot(
      { app: appReducer },
      {
        initialState: { app: appInitialState },
        metaReducers: !environment.production ? [storeFreeze] : []
      }
    ),
    EffectsModule.forRoot([AppEffects]),
    !environment.production ? StoreDevtoolsModule.instrument() : []
  ]
})
export class CoreModule {
}

2 个答案:

答案 0 :(得分:0)

您可以在path的{​​{1}}配置中添加项目结构别名。

tsconfig.json

建议(替代方法):您可以尝试避免在共享模块中创建根状态。而是在相应的应用程序模块中创建根状态,并在共享模块中创建功能状态并导入它们。这样一来,它可能会更容易。还请检查一下,在共享模块中创建根存储并将其导入会创建一个还是两个根存储实例?

答案 1 :(得分:0)

这是一个常见问题,因为环境文件是通过CLI在应用程序级别存储的。解决此问题的一种方法是为特定应用libs/myapp/data-access-environment提供专用于环境的lib。这将包含两件事:

  1. 环境(MyAppEnv)的类型定义
  2. 注入令牌(MYAPP_ENV_TOKEN

您可以使用注入令牌为应用程序提供值。例如。在您的app.module中:

provide: [ { provide: MYAPP_ENV_TOKEN, useValue: myEnv }] // import myEnv from environment.ts

然后在其他库中,您可以插入令牌并添加键入内容

constructor(@Inject(MYAPP_ENV_TOKEN) private env: MyAppEnv) {}

通过这种方式,您可以将环境与应用程序分离。