Одним из выступленией, заинтересовавших меня на конференции Meet Magento Baltics, было выступление Sander Mangel о возможностях применения Vue Storefront (VSF) совместно с Magento.
PWA является перспективным направлением развития в web-разработке. Разработчики Magento 2 предлагают свой набор инструментов для создания современного, мобильно-ориентированного web-приложения, соответствующего традициям Magento, а разработчики Vue Storefront пошли по пути создания универсального фронта, способного через адаптеры взаимодействовать с различными backend'ами (Magento, WooComerce, Odoo, ...). Несколько месяцев назад я попробовал PWA Studio от Magento и пришёл к выводу, что решение пока что сыровато. Демо-версия Vue Storefront произвела на меня очень хорошее впечатление и мне захотелось пощупать это решение более интимно.
Отдаю должное ребятам, подготовившим демку для развёртывания — достаточно соответствовать условиям (иметь предустановленными nodejs, yarn, docker, ...), выбрать все опции по-умолчанию в процессе установки, и можно получить на собственной машине PWA, аналогичное демо-версии. Но мне же не нужно иметь ещё одну демку, мне нужно подключить Vue Storefront к уже имеющимся у меня проектам. И вот тут начинается засада.
У Magento-разработчиков хорошее представление о мире PHP и, как правило, не очень хорошее о мире nodejs. Вещи, тривиальные для второго мира, вызывают ступор у обитателей мира первого. Под катом я описал свой второй подход к развёртыванию Vue Storefront в попытке подключить его к имеющемуся у меня проекту. Сразу скажу, что результатом второго подхода у меня является приложение не подключенное ни к чему, но хотя бы загружающееся в браузер. Очень похоже, что мне придётся сделать ещё не один подход, пока я получу желаемый результат.
Цель
В процессе ознакомления с Vue Storefront мои цели становились всё скромнее и скромнее, пока я остановился на совсем скромной — собрать проект на отдельном сервере и загрузить приложение в браузер.
Рабочее окружение
Для чистоты экспериментов я использую IaaS. Из приведённых в таблице сервис-провайдеров я остановился на Exoscale (моя реферальная ссылка для регистрации). Минимальный депозит при регистрации 5 EUR (+ 21% европейский НДС), но этой суммы хватит, чтобы поиграться не один раз. Сервис действительно снимает деньги только за то, что ты используешь (вычислительные мощности, дисковое пространство, сеть).
Я игрался на small-версии Linux Ubuntu 18.04 LTS 64-bit (2x 2198 MHz CPU, 2 GB RAM, 10GB disk).
Подготовка рабочего окружения:
$ sudo -i
# apt update
# apt upgrade -y
Установка nodejs & npm:
# curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
# apt-get install -y nodejs
# node --version && npm --version
v12.13.0
6.12.0
Установка yarn:
# curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
# echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
# apt-get update && sudo apt-get install yarn
# yarn --version
1.19.1
Установка VSF
Предварительно устанавливаем PM2 и vue-storefront/cli:
# npm install pm2@latest -g
# pm2 --version
4.1.2
# npm install @vue-storefront/cli@latest -g
Выходим из root'а и создаём vue-storefront
приложение версии 1.10.4 в ручном режиме:
# exit
$ cd ~
$ vsf init
Check avalilable versions
? Which version of Vue Storefront you'd like to install? Stable versions (recommended for production)
? Select specific version v1.10.4
? Would you like to use friendly installer or install Vue Storefront manually? Manual installation
Copying Vue Storefront files
Переходим в корневой каталог приложения и создаём локальную конфигурацию:
$ cd vue-storefront/
$ cat > ./config/local.json
{
"server": {
"host": "0.0.0.0"
}
}
Базовая конфигурация находится в файле ./config/default.json
. Она нас устраивает за исключением опции server.host
, т.е. мы собираемся подключаться к серверу удалённо. Порт (server.port
) я оставил по-умолчанию — 3000.
Сборка приложения
Вот тут пришлось поэкспериментировать, в конце концов пришёл к такой последовательности команд:
$ npm install
$ yarn install
$ yarn build
$ yarn upgrade # может и не нужно, но на предыдущем шаге попросили выполнить эту команду
Запуск и остановка приложения
$ yarn start
$ pm2 stop all
Подключение к приложению
Адрес приложения: http://xxx.xxx.xxx.xxx:3000/ В результате имеем сообщение об ошибке:
Заключение
Да, результат не слишком впечатляет, но зато обошлось и без особого magic
'а. Redis, ElasticSearch, GraphQL — это всё настраивается в ./config/default.json
и отсутствует на данный момент. А ещё должен быть vue-storefront-api
и модуль для репликации данных между vue-storefront-api
и Magento 2. Очень надеюсь, что я напишу ещё и про них.
Пока всё. Спасибо за прочтение.