Минимальная установка Magento 2

Данный сайт функционирует на Magento с модулем блога от Magefan

Изначально движок я ставил стандартно с помощью composer

$  sudo composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.x magento2

Оно ставит пакет 'magento/product-community-edition' со всей своей кучей зависимостей и ненужных модулей

Потом я долго сидел и руками отключал те модули, которые можно отключить:

bin/magento module:disable <Module>

 

Но недавно наткнулся на Хабре на статью по минимальной установке Magento. И сделал у себя на сайте сайте как написано в данной статье

Собственно, пересказывать статью не буду, я делал все по статье (хотя я ставил версию 2.4.7 более свежую, чем у автора, но сильных различий я не заметил)

Единственно, у меня вылезла ошибка, описанная вот здесь

Насколько я понял это из-за более свежей версии библиотеки ICU library

Патч взял там же на github и применил его у себя в composer.json

    "extra": {
        "magento-force": "override",
        "composer-exit-on-patch-failure": true,
        "patches": {
            "magento/framework": {
                "ICU library where AmPmMarkers": "patches/composer/github-issue-38364.diff"
            }
        }
    }

 

Еще мне не понравилось, что пропала версия (родной метод  \Magento\Framework\App\ProductMetadata::getVersion возвращал UNKNOWN вместо версии)

Это из-за того, что данный метод работает с композером с файлом vendor/composer/installed.php и ищет пакет с именем 'magento/product-community-edition'

public function isSystemPackage($packageName = '')
{
    if (preg_match('/magento\/product-.*?-edition/', $packageName) == 1) {
        return true;
    }
    return false;
}

(это тот пакет, который тянет тысячу зависимостей и от которого я отказался)

В итоге самым простым решением IMHO является плагин:

<?php

namespace Emagento\Misc\Plugin\Framework\App;

class ProductMetadata
{
    private const VERSION = '2.4.7';

    public function aroundGetVersion(\Magento\Framework\App\ProductMetadata $subject, \Closure $proceed)
    {
        return self::VERSION;
    }
}

 

После этого версию возвращает нормально

Вот вывод команды n98-magerun2

$ php n98-magerun2 sys:info
Name Magento
Version 2.4.7
Edition Community
Root /opt/www/magento2/e-magento.ru.local
Application Mode developer
Session files
Search Engine lmysql
Cache Backend Cm_Cache_Backend_File
Vendors Magento, Emagento, Magefan, Swissup
Module Count 79
Attribute Count 157
Customer Count 0
Category Count 2
Product Count 0
Admin User Count 1
Composer Lock File found
Composer Package Count 197
Magento Composer Root Update Plugin not installed
Magento Composer Dependency Version Audit Plugin installed
Magento Coding Standard Package not installed
Magento Functional Testing Framework not installed
MSI Packages not installed
Sample Data Packages not installed
Hyva Default Theme not installed
Hyva Theme Module not installed

 

Вот так выглядит каталог vendor

Согласитесь, это гораздо лучше, чем обычная установка с помощью композера :)