Прежде всего, я хотел бы сказать, что я совершенно новичок в Ionic, а также в Angular. Простите меня за любой глупый вопрос или комментарий.
Что ж, я провожу некоторые тесты, чтобы лучше понять, как компилятор AOT работает с Angular и Ionic.
Я столкнулся с такой ситуацией, когда у меня есть компонент с закрытыми полями, к которым есть доступ в моем шаблоне, но сборка работает отлично. Насколько я понял, это должно вызвать ошибку.
@IonicPage()
@Component({
selector: 'page-login',
templateUrl: 'login.html',
})
export class LoginPage {
private username : string;
private password : string;
//etc etc
}
Мой шаблон ссылается на поля следующим образом:
<ion-input [(ngModel)]="username" name="username" type="text" required>
<ion-input [(ngModel)]="password" name="password" type="password" required>
Затем я запускаю команду ниже, и ошибка не появляется:
ionic build --prod
Running app-scripts build: --prod
[22:13:51] build prod started ...
[22:13:51] clean started ...
[22:13:51] clean finished in 1 ms
[22:13:51] copy started ...
[22:13:51] deeplinks started ...
[22:13:51] deeplinks finished in 44 ms
[22:13:51] ngc started ...
[22:13:57] ngc finished in 5.39 s
[22:13:57] preprocess started ...
[22:13:57] preprocess finished in less than 1 ms
[22:13:57] webpack started ...
[22:13:57] copy finished in 5.66 s
[22:14:23] webpack finished in 25.97 s
[22:14:23] uglify started ...
[22:14:23] sass started ...
[22:14:24] sass finished in 1.35 s
[22:14:24] cleancss started ...
[22:14:25] cleancss finished in 1.22 s
[22:14:37] uglify finished in 14.13 s
[22:14:37] postprocess started ...
[22:14:37] postprocess finished in 13 ms
[22:14:37] lint started ...
[22:14:37] build prod finished in 45.69 s
Я обнаружил открытую проблему в Angular github с такой же ситуацией: https://github.com/angular/angular/issues/14739.
В этой проблеме сообщалось, что ошибка появляется только при запуске ngc во второй раз, потому что при первом запуске ngc генерирует ngfactories и только при втором запуске пытается преобразовать эти factory в Javascript, а затем обнаруживает проблему.
marlon@marlon-dell-5480 ~/ $ node_modules/.bin/ngc
marlon@marlon-dell-5480 ~/ $ node_modules/.bin/ngc
src/pages/login/login.ngfactory.ts:234:32: Property 'username' is private and only accessible within class 'LoginPage'.
Эта ситуация может стать проблемой, если кто-то в команде забудет какое-то приватное поле и молча сломает сборку AOT.
Столкнулся с таким сценарием:
- Почему AOT не сообщает об ошибках при запуске ionic build?
- Нужно ли мне настроить какие-либо настройки, чтобы ошибка отображалась ionic-cli?
- Были ли какие-либо изменения в AOT в отношении использования закрытых полей, доступ к которым осуществляется в шаблоне?