Создайте скомпилированную библиотеку Ahead-of-Time (AOT) для использования приложениями Angular - PullRequest
0 голосов
/ 19 мая 2018

У меня есть библиотека Angular 5, которую я представляю в виде пакета для других приложений, чтобы использовать их node_modules.

В настоящее время приложение скомпилировано в режиме Just-in-Time (JIT) с использованием rollupи gulp и экспортируется как пакет.Таким образом, приложения-разработчики используют мой пакет в своей JIT-скомпилированной форме.

Исследования об AOT привели меня к мысли, что любое Angular-приложение, которое при компиляции AOT является гораздо более производительным, чем его аналог JIT в браузере.Однако, как разработчик библиотеки, я хотел бы знать, получат ли разработчики приложений какое-либо преимущество в производительности, если я представлю свою библиотеку, скомпилированную AOT?

Я использую ng-bootstrap и множество других библиотек с открытым исходным кодом.для создания компонентов в моем модуле и добавления пользовательских стилей или функций поверх них.Все библиотеки, которые я использую в моем модуле, также должны быть в их AOT-формах, или я мог бы использовать их аналоги JIT?

Кроме того, я думаю, что было бы неплохо иметь отдельные пакеты для моей библиотеки - packageName и packageName-aot, чтобы у пользователей была возможность выбрать любую библиотеку, которую они хотят использовать.

Помимо рефакторинга всего кода (изменение закрытых переменных, используемых в шаблоне, на public, удаление функций стрелок,лямбда-выражения и т. д.), есть ли еще что-то, что я должен иметь в виду, прежде чем выставлять свои библиотечные модули в форме AOT?

Я не могу использовать Angular CLI из-за определенных ограничений, поэтому должен зависеть от @ngtools/webpack чтобы получить AOT-компиляцию, если она есть.

В настоящее время мой tsconfig.json имеет следующие параметры:

"angularCompilerOptions": {
    "skipTemplateCodegen": true,
    "strictMedtadataEmit": true,
    "fullTemplateTypeCheck": true
}

Я много искал в Интернете, но документы Angular AOT довольнорасплывчато и не очень понятно, что я пытался сделать здесь.Любое направление будет очень полезно.
Спасибо!

1 Ответ

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

Библиотека, которую вы пишете, и библиотеки, от которых зависит ваша библиотека, должны поддерживать AOT .Это действительно все, что нужно сделать.

Вы не пишете и не доставляете библиотеку, скомпилированную AOT ( форма скомпилированная AOT , как вы выразились);приложения-потребители будут выполнять компиляцию AOT во время сборки.

Все, что вы должны сделать, это убедиться, что когда приложение-потребитель выполняет сборку AOT (ng build --prod при использовании Angular CLI), ваша библиотека работает хорошо.Под звучит неплохо Я имею в виду, ваша библиотека может скомпилировать AOT с потребляющим приложением без ошибок.

Инструменты библиотеки, такие как generator-angular2-library или ng-packagr (это инструмент, который @ angular / cli 6.0.0 использует для поддержки создания библиотек), просто создавайте пакеты для JavaScript, не более того.

Создание AOT-сборки зависит от инструмента сборки приложения-потребителя.Это то, что позволяет использовать библиотеку любым приложением (или структурой приложения / библиотекой), которому это необходимо.Старайтесь не задумываться над тем, что нужно для создания / развертывания библиотеки.Тяжелый подъем AOT зависит от приложения, которое его использует.

...