Использование ActionReducerMap с StoreModule.forFeature дает ошибку сборки - PullRequest
1 голос
/ 02 октября 2019

У меня есть угловая структура проекта, как показано ниже:

/(root or repo folder)
 |_ projects
    |_ mylib (this is the main library that will be exported from the repo)
    |_ sample-app (created to consume 'mylib ' project to test that things work fine when 'mylib' would be consumed in other projects)

Для обработки состояния приложения я использую ngRx (из которых у меня есть только базовые знания). Проект настроен с Angular8.2.5, ngRx 8.3.0 и RxJs 6.5.3.

При выполнении npm start в репо, sample-app проект загружается, а mylib проект загружается лениво.

Вот как я инициализировал магазин приложений / состояние

В sample-app/app.module.ts (внутри sample-app проекта)

StoreModule.forRoot({}, {
      runtimeChecks: {
        strictStateImmutability: true,
        strictActionImmutability: true,
        strictStateSerializability: true,
        strictActionSerializability: true,
      },
    }),
!environment.production ? StoreDevtoolsModule.instrument({ name: 'My Sample App' }) : [],

В mylib/mylib.module.ts (внутри mylib project)

import { libReducer} from './shared/store/lib.store';
StoreModule.forFeature('libState', libReducer)

libReducer экспортируется из mylib/shared/store/lib.store.ts файла

export interface subFeatureOneState {
    // some properties defined here
}

export interface LibState {
  subFeatureOneReducer: subFeatureOneState;
}

export const libReducer: ActionReducerMap<LibState> = {
  subFeatureOneReducer,
};

Единственная проблема, с которой я сталкиваюсь при этой настройке, заключается в том, что при попытке получить ошибкупостроить свой проект (используя ng build).

Ошибка говорит:

enter image description here

Проверка журналов не дает особой помощилибо.

Проблема сборки будет решена, если я изменю StoreModule.forFeature определение в mylib.module.ts на

StoreModule.forFeature('libState', subFeatureOneReducer)

, но это не то, чего я хочу, поскольку я намерен сохранить все свои редукторыв одном месте и только одна ссылка StoreModule.forFeature внутри mylib проекта.

Я не смог найти много статей в Интернете, которые объясняют использование ActionReducerMap для функционального модуля хранить. Я придерживался подхода, упомянутого ниже, но он не решил проблему сбоя сборки: @ ngrx / store объединяет несколько редукторов из функционального модуля

Что-то не так с тем способом, который я настроилхранить / редукторы для инициализации? Было бы здорово, если бы я мог получить какие-либо указатели на это, чтобы решить проблему с ошибкой сборки.

1 Ответ

1 голос
/ 02 октября 2019

Вот мой код, я думаю, вам не хватает ROOT_REDUCERS

export const ROOT_REDUCERS = new InjectionToken<
  ActionReducerMap<State, Action>
>("Root reducers token", {
  factory: () => ({
    router: fromRouter.routerReducer
  })
});

StoreModule.forRoot(ROOT_REDUCERS, {
    metaReducers,
    runtimeChecks: {
    strictStateImmutability: true,
    strictActionImmutability: true
    }
}),

Вот мой полный код для вашей ссылки

...