Угловой 6: Как я могу добавить модули в зависимости от конфигурации? - PullRequest
0 голосов
/ 17 мая 2018

То, что я сделал до сих пор (и что работало нормально)

У меня есть угловое приложение, которое используется несколькими различными клиентами, которое я в настоящее время обновляю с углового 4 до углового 6. Клиенты имеютих собственные отличающиеся расширения, поэтому в angular 4 я создал один модуль для каждого клиента (который настраивает настройки), а затем я создал один файл environment.CUSTOMER_NAME.ts для каждого клиента с содержанием, подобным этому:

export const environment: Environment = {
    extraModules: [MODULE_FOR_THIS_CUSTOMER]
};

Затемв моем основном модуле я использовал:

@NgModule({
    imports: (<Array<Type<any> | ModuleWithProviders | any[]>>[
        BrowserModule,
        FormsModule,
        /* .. */
    ].concat(environment.extraModules)),
    /* .. */
})
export class AppModule { }

Это прекрасно работало.Запустив ng build --env=SOME_CUSTOMER, соберите все приложение, включая модули для этого конкретного клиента.

Проблема

Теперь я обновился до версии Angular 6 и получил ошибку:

ERROR in : 'router-outlet' is not a known element:
1. If 'router-outlet' is an Angular component, then verify that it is part of this module.
2. If 'router-outlet' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message. ("[ERROR ->]<router-outlet></router-outlet>")

После дня наращивания седых волос и решения уволиться с работы и стать водителем автобуса, я в конце концов понял, что моя concat команда, кажется, является корнем проблемы.По крайней мере, это в сочетании с параметрами

"aot": true,
"buildOptimizer": true,

в файле angular.json.Если я установлю оба из них на false, все будет работать нормально, даже с моей старой структурой.Удаление команды concat также устраняет проблему.

Естественно, я не хочу оставлять эти опции отключенными, так что я могу сделать, чтобы модуль по-прежнему включался, только если активна определенная конфигурация?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Хотя вызов concat больше невозможен, он работает нормально при использовании оператора распространения ..., который также поддерживается TypeScript начиная с версии 2.1:

@NgModule({
    imports: [
        /* .. */
        ...environment.extraModules
    ]
})
0 голосов
/ 17 мая 2018

сказано:

ERROR in : 'router-outlet' is not a known element:

Я думаю, вы, возможно, используете роутер-розетку в своих клиентских модулях. Вы должны убедиться, что вы импортируете модуль маршрутизатора в свои модули.

...