Доступ к настройке среды из публикуемой угловой библиотеки - PullRequest
0 голосов
/ 08 июня 2019

Я создал рабочую область на основе Nx, в которой есть два приложения оболочки (app1 и app2).Будет повторно использовать эту библиотеку CoreModule в этих двух приложениях.

При добавлении корня хранилища Ngrx я получаю сообщение об ошибке при доступе к объекту среды Environment из библиотеки, поскольку в приложениях оболочки существует папка 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 голосов
/ 11 июня 2019

Это распространенная проблема, поскольку CLI хранит файлы среды на уровне приложения. Одним из способов решения этой проблемы является наличие библиотеки, посвященной среде для конкретного приложения libs/myapp/data-access-environment. Это будет содержать две вещи:

  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) {}

Таким образом, вы можете отделить среду от вашего приложения.

0 голосов
/ 10 июня 2019

Вы можете добавить псевдонимы структуры вашего проекта в path config в вашем tsconfig.json.

{
  "compilerOptions": {
    ...,  
    "baseUrl": ".",
    "paths": {
      ...,
      "@mainApp/*": ["app1/app/*"],
      "@secondApp/*": ["app2/app/*"]
    }
  }
}

Предложение (альтернативный подход): вы можете попытаться избежать создания корневого состояния в общем модуле.Вместо этого создайте корневое состояние в соответствующих модулях приложения и создайте состояние функции в общем модуле и импортируйте их.В таком случае это может быть проще. Также, пожалуйста, проверьте, создаете ли корневое хранилище в общем модуле и импортируете ли вы один экземпляр корневого хранилища или два?

...