Моята цел с тази статия е да помогна на хора без опит с Composer, да могат да го приложат лесно, за да добавят в Drupal модул който абсолютно изисква composer. Целта не е да станете експерт в composer, а с минимум инвестирано време да можете да използвате composer в Drupal . Надявам се това да Ви е от полза.
Използвам Drupal от много години, започнах през 2010 г. Не съм уебмастър и никога не съм имал намерение да го използвам професионално. Започнах с Drupal 6, по-късно използвах Drupal 7 и от няколко месеца реших да премина на Drupal 8. В момента използвам Drupal 8 за уебсайт на хотел https://hoteliprimorsko.net/
Изграждането на вашия сайт с drupal 8 е малко по-различно по отношение на интеграцията на външни библиотеки. По-рано до Drupal 7 винаги е било възможно да добавите модул, просто като го изтеглите от drupal.org/project/name_ Contributedmodul или копирате линк tar.gz от сайта на модула. По отношение на всякакви външни библиотеки активирането на модул API на библиотеката и изтеглянето на външна библиотека в /sites/all/libraries/name_library беше напълно достатъчно. С Drupal 8 обаче нещата се промениха. Интегрирането на външна библиотека, описано по-горе, не винаги работи. Дори много модули няма да се инсталират без composer. Например drupal.org/project/minifyjs и drupal.org/project/recaptcha няма да работят, ако са инсталирани без composer. Можеби има същия проблем и при инсталацията на темплейти(themes).
Тъй като ключовата дума тук е Composer няколко думи за нея. Това е инструмент за управление на пакети или можем да го наречем инструмент за управление на зависимости, подобен на Synaptic Package manager в Ubuntu / Linux. Той се използва за актуализиране на вашата инсталация на drupal и за ПРАВИЛНО добавяне на всички допълнителни модули, включително всички необходими зависимости. Поне аз лично затова използвам composer.
Проблемът: Composer ще работи само ако имате директен достъп до сървъра. SSH достъп например. Нямам представа колко drupal сайтове се хостват на споделен хостинг, но SSH достъп и съответно директно използване на composer на споделен хостинг не е възможно, тъй като доставчикът на хостинг не го позволява от съображения за сигурност.
Ако имате малък сайт със сигурност поради съображения за цената, няма да го хоствате на собствен сървър, а вместо това ще използвате споделен хостинг.
Ресурсите за използване на Composer за които говоря тук са компютър, интернет връзка и ftp връзка към вашия сайт. Би трябвало да е лесно да се осигурят.
Преди всичко, преди да правите някакви промени, архивирайте файловете на вашата база данни и на Drupal сайта. Стандартно предупреждение: Следвайте инструкциите написани тук на свой собствен риск.
Composer променя само Drupal файловете и няма нищо общо с базата данни. Следователно можем да използваме composer локално на нашия компютър. Първо свалете Вашия съществуващ сайт на drupal 8 (поне Drupal 8.8.0). Направете промени в drupal файловете локално, като използвате мениджъра на пакети Composer. След това качваме модифицираните от composer файлове обратно на сайта на Drupal на уеб сървъра (споделен хостинг). За да избегнете проблеми, бих препоръчал да направите това в нова директория и да не замествате продуктивната директория на drupal. По този начин можете да тествате с поддомейн дали актуализираните от composer файлове на сайта работят според очакванията със старата база данни или копие на старата база данни. Ако е добре, можете да превключите новата си директория обработенa с composer да бъде продуктивна директория за вашия сайт на домейнa на живо. Стартирайте example.com/update.php проверете за грешки в example.com/admin/reports/status и admin/reports/dblog. Също така проверете за грешки в /admin/reports/status.
Моля, обърнете внимание на https://www.drupal.org/docs/installing-drupal/add-composer-to-an-existing-site “Дори ако сте инсталирали Drupal 8.8.0 от tarball, Composer е бил предварително инсталиран. Така че трябва да можете да управлявате сайта си с помощта на Composer, без да предприемате допълнителни стъпки за конвертиране на сайта. " Затова при всички случаи, за да нямате главоболия, първо актуализирайте сайта си до поне Drupal 8.8.0, преди да продължите с composer.
За целите на този урок ще изтегля последната налична версия на Drupal 8, която към този момент е drupal 8.9.13. Мога да изтегля .tar.gr или .zip (няма значение) и да го разархивиран и кача в моята хостинг директория, наречена composer. След това ще конфигурирам Mysql база данни на хостинг сървъра и ще направя демо drupal инсталация, наречена composer. Също така ще konfiguriaram и използвам поддомейн, наречен composer.example.com който ще да насоча към директорията която току-що създадох.
В сравнение с drupal 7, недостатъкът на drupal 8 е че съдържа много повече файлове. Затова ftp качването и свалянето на drupal 8 сайт отнема много време, но със сигурност има причина за това. Не вярвам екипа на drupal 8 да са направили това за забавление.
И сега стъпка по стъпка:
1. Ще демонстрирам до какво води инсталацията на Minify JS по стандартния начин
В този урок ще ви покажа два примера:
- допълнителен модул drupal Minify JS https://www.drupal.org/project/minifyjs
- допълнителен темплейт https://www.drupal.org/project/bootstrap
Minify JS е инсталиран без composer. След инсталирането модула се съхранява в /modules/minifyjs/ Активиран е, но не работи. Генерира грешка при опит за минимизиране на JS файлове. Вижте грешка по-долу:
Тъй като така инсталиран Minify JS не работи, ще преинсталираме Minify JS с помоща на composer на локалния ни компютър
2. Инсталирайте composer 2 на вашия компютър (Ubuntu 18 в моя случай).
Защо composer 2? Нямам представа, но това е което работи за мен.
Това са командите за Ubuntu. Четох, че има версия на composer за Windows, но не съм тествал.
curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
sudo apt-get update
sudo apt install php-xml
sudo apt-get install php-gd
Подготвителни работи
3. Изтеглете съществуващия си Drupal сайт на вашия компютър, където притежавате разрешения за достъп за четене и писане (много важно за Ubuntu). В този пример изтеглих съществуващия Drupal сайт на моя локален компютър тук /home/ivo/Downloads/no-composer/
Моля, обърнете внимание, че Minify JS инсталацията, използвайки стандартна drupal инсталация на модул, не прави никаква промяна в composer.json, намиращ се в основната директория на drupal. Съдържанието на раздел „requireе“ не съдържа запис на Minify JS, защото composer не е използван за тази инсталация.
"require": {
"composer/installers": "^1.2",
"drupal/core-composer-scaffold": "^8.8",
"drupal/core-project-message": "^8.8",
"drupal/core-recommended": "^8.8",
"drupal/core-vendor-hardening": "^8.8"
},
4. Запазете структурата на Drupal директориите на сайта си.
За да кажете на composer да наследи и използва текущата директория на модулите ви, направете следните промени в composer.json, намиращ се в коренната директория на drupal
намери
"modules/contrib/{$name}"
"themes/contrib/{$name}"
и замени с
"modules/{$name}"
"themes/{$name}"
5. Подгответе списък с ваще модули и темплейти
Направете списък на всички необходими модули, от които се нуждаете (просто проверете директория /module). Стартирайте composer и инсталирайте / пре-инсталирайте всички необходими модули и темплейти, необходими за вашия сайт, които преди това сте инсталирали без composer. По този начин ще направите структура на сайта си да отговаря на Drupal composer.
За да стартирате локално composer, щракнете с десния бутон в основната директория на drupal (където се намира composer.json) и изберете „отворете терминал тук“ (валидно в ubuntu). Моля забележете името на директорията съхраняваща съответния модул е и името на командата която използваме в composer. В конкретния случай е „minifyjs”.
- първо използваме composer, за да премахнем неработещия модул minifyjs с командата
composer remove drupal/minifyjs
Не съм сигурен, че тази стъпка е необходима. Можете да опитате пре-инсталация директно с командата "composer require drupal/(module-name)"
Compser ни казва, че тук няма нищо за модифициране, нищо за премахване, защото „drupal/minifyjs не е в списъка според изискванията в composer.json и следователно за composer той не съществува.
Тъй като minifyjs е инсталиран без composer, той не е влязъл в example.com/composer.json, следователно за него не съществува. Можем безопасно да изтрием файловете и да инсталираме отново с composer (това не е задължително).
5.1 Използвайте composer за да инсталирате minifyjs
Сега ще инсталираме minifyjs с composer и ще видим как example.com/composer.json се е променил
Сега изпълняваме composer require drupal/minifyjs
И всичко е ok.
Сега проверяваме отново composer.json и вече minifyjs е включен в списъка, което означава, че е инсталиран с всички зависимости. Файловете на модулите също са копирани в /modules/minifyjs.
"require": {
"composer/installers": "^1.2",
"drupal/core-composer-scaffold": "^8.8",
"drupal/core-project-message": "^8.8",
"drupal/core-recommended": "^8.8",
"drupal/core-vendor-hardening": "^8.8",
"drupal/minifyjs": "^2.2"
},
5.2 Инсталиране на темплейт
Само за пример ще добавим темплейт(theme) с помощта на
composer require drupal/bootstrap
Получаваме нормален резултат в терминала. Composer успешно инсталира темплейт Bootstrap.
Виждаме, че Bootstrap файловете са добавени в /themes/bootstrap/
Също така composer.json съдържа bootstrap запис
"require": {
"composer/installers": "^1.2",
"drupal/bootstrap": "^3.23",
"drupal/core-composer-scaffold": "^8.8",
"drupal/core-project-message": "^8.8",
"drupal/core-recommended": "^8.8",
"drupal/core-vendor-hardening": "^8.8",
"drupal/minifyjs": "^2.2"
},
5.3. Повторете 4.1 и / или 4.2 за всеки допълнителен модул или темплейт, който е необходим за вашият сайт.
5.4 Активирайте сайта на живо
Когато приключите, качете локално модифицираните с composer файлове на сайта на Drupal (в този пример локално в /home/ivo/Downloads/no-composer/) с помощта на FTP обратно във вашата уеб директория, където се намира вашият споделен хостинг.
Когато качването приключи, стартирайте example.com/update.php, за да актуализирате базата данни
Сега тестваме minifyjs и той работи. Java скриптовете са успешно минимизирани.
Друга полезна команда за актуализиране на drupal ядрото с composer е по-долу.
//актуализирайте ядрото до най-новата версия 8.9.XY
composer require 'drupal/core-recommended:^8.9' --update-with-all-dependencies