Блоги

Навигационные полоски

Angular 5 и Liferay

Не так давно Liferay добавили поддержку современных JavaScript фреймфорков с использованием liferay-npm-bundler. Причем речь шла не только о поддержке Angular, React, Vue и иже с ними - но и в целом об интеграции различных модульных концепций - портлетов с несколькими модулями-портлетами на странице, OSGI, NPM, AMD...

Проблемой liferay-npm-bundler было то, что он поддерживал только Angular 4, и то, что портлеты на Angular оказались не совместимы с Liferay SPA (при переходе на страницу с портлетом без перегрузки всей страницы вылетала ошибка инициализации).

Но разработчики Liferay не стоят на месте! Изучив проблемы, выявленные в первой версии они выпустили вторую версию бандлера. Этому посвящена целая серия постов на сайте Liferay:

Хорошая новость: теперь поддерживается Angular 5 и ушла проблема поддержки Liferay SPA

Плохая (относительно) новость - поддерживается только Liferay 7.1 (благо беты уже достаточно стабильны).

Далее я хочу рассказать о том, как запустить пример портлета на Angular 5 на последней (на текущий момент) Liferay 7.1 Beta 3.

Для начала берем исходники из github.

Далее надо исправить gradle.properties, прописав в нем использование нужной версии Liferay:

liferay.workspace.bundle.url=https://cdn.lfrs.sl/releases.liferay.com/portal/7.1.0-b3/liferay-ce-portal-tomcat-7.1-b3-20180611140920623.zip

Так же надо будет подправить файл modules/npm-angular5-portlet-say-hello/build.gradle изменив зависимость на portlet-api обратно на 2.0 (у меня при деплое сказал что не нашел portlet-api 3.0.0)

Далее штатный набор команд:

$ ./gradlew initBundle
$ ./gradlew deploy
$ blade server start

и мы получаем портал с портлетом на Angular 5.


Из проблем - на MacOS может вылезти ошибка

Bundling 20 dependencies...
{ Error: ENFILE: file table overflow, open '/Users/akakunin/work/liferay/liferay-npm-bundler-2-example/modules/npm-angular5-provider/node_modules/liferay-npm-bundler-plugin-replace-browser-modules/package.json'
    at Error (native)

лечится следующим набором команд:

$ echo kern.maxfiles=65536 | sudo tee -a /etc/sysctl.conf
$ echo kern.maxfilesperproc=65536 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -w kern.maxfiles=65536
$ sudo sysctl -w kern.maxfilesperproc=65536
$ ulimit -n 65536

 

21.06.2018