Я сделал довольно большое приложение Angular (Angular 5 и Ionic 3), которое я встроил в приложение для Android.Во время разработки я всегда использовал ionic cordova build
, но теперь я хочу сделать хорошую рабочую версию (в которой не должно быть ~ 15 секунд белого экрана во время загрузки), используя ionic cordova build --prod
.
К сожалению, мне пришлось изменить много структур в моем приложении, так как компилятор AOT выдает ошибки о моем AppModule.Большинство причин ошибок я решил, так как они касались экспорта и одного из моих собственных модулей.
Мое приложение состоит из множества небольших «приложений», в которых пользователь может переключаться между меню.Меньшие приложения загружаются по клику.Чтобы уменьшить объем «конфигурации», которая должна быть выполнена разработчиком при импорте и экспорте, я обернул компоненты этих небольших приложений в объект, который также содержит некоторую общую информацию, такую как имя приложения, описание и т. Д. Эти объекты собраныв одном файле и поместить в список.
App One
@Component({
selector: 'app-one',
templateUrl: 'app-one.component.html'
})
export class AppOneComponent {
...
}
export const AppOne: AppConfiguration = {
id: 10,
name: 'App One',
description: '...',
component: AppOneComponent
}
Сбор всех приложений вместе в файл "module.ts", этобудет импортирован в AppModule
import { AppOne } from './app-one/app-one.component';
import { AppTwo } from './app-two/app-two.component';
import { AppThree } from './app-three/app-three.component';
// This apps list will be imported in the app menu's component to show all apps,
// and use their component property to load the app once clicked
export const apps = [
AppOne,
AppTwo,
AppThree,
];
// This components list will be imported by the AppModule so all the
// components are known in the app
export const components = apps.map(a => a.component);
AppModule
import * as MyApps from './apps/module';
@NgModule({
declarations: [
...MyApps.components
],
...
...
})
export class AppModule { }
Но теперь проблема в том, что компилятору AOT явно не нравится .map()
(и, возможно, другие методы) и возвращает ошибку.JIT-компилятор по умолчанию не имеет проблем с этим.
Неожиданное значение 'null', объявленное модулем 'AppModule в C: /code/app/src/app/app.module.ts'
Я подтвердил, что ни один из компонентов NULL
не имеет ничего похожего на пустое значение / свойство, так что это не должно иметь место.Если я сам составлю список, все будет в порядке.
export const components = [
AppOne.component,
AppTwo.component,
AppThree.component,
];
Необходимость выписывать все экспорты, такие как это, добавляет много накладных расходов, тем более что список будет расти со временем по мере добавления новых приложений.Приложения также имеют подкомпоненты, которые также настраиваются и добавляются в основной модуль AppModule таким же образом (я упустил это из примера для простоты).Есть ли способы, чтобы я мог продолжать использовать мою более простую форму импорта / экспорта?