Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Два composer.json для проекта


Автор: SkyTello 16.5.2018, 19:53
Добрый день.
Хочу написать движек сайтов на yii2 и задумывается структура проектов с двумя composer.json
Первый будет отвечать за все общие зависимости для движка, тоесть пакет с yii2 и т.п.
Второй будет на каждом сайте свой и подтягивать все пакеты и зависимости в свой vendor которые нужны конкретно этому проекту.

Для осуществления данной задумки хотел использовать composer-merge-plugin в json проекта устанавливаю и прописываю настройки к главному json файлу:

Код


    "require": {
        "wikimedia/composer-merge-plugin": "^1.4"
    },
    "extra": {
        "merge-plugin": {
            "require": [
                "../../yii2sources/core/composer.json"
            ],
            "recurse": true,
            "replace": false,
            "ignore-duplicates": false,
            "merge-dev": true,
            "merge-extra": false,
            "merge-extra-deep": false,
            "merge-scripts": false
        }
    }


Проблема наступает при composer update того джейсона который относится непосредственно к проекту. он начинает тянуть все содержимое указанное в главном файле json хотя оно уже и так было скачано в общий vendor. Получается что фреймворк у меня сразу в двух местах находится и это естественно не то что задумывалось.

Можно ли сделать таки как это сделать, чтоб компосер проекта не тянул уже скаченные пакеты из основного json файла если они уже и так были скачаны и находятся в своем вендоре, а тянул только то что прописано в проектном json и только те зависимости которых нет в основном?

Автор: Vardoulacha 17.5.2018, 07:02
Для этого вы свой движок делаете library, а проект делаете project, который создается как create-project (по факту делается клон репы и запуск composer install), таким образом в проекте будет по умолчанию всего одна зависимость от вашего ядра, и лежать ядро будет в vendor, а дальше к проекту цепляйте что хотите.

в качестве примера (никакой рекламы, проект для своих нужд) вот мое ядро
https://github.com/Lemurro/core

а вот api-сервер, который использует это ядро
https://github.com/Lemurro/server
и у него в composer.json только зависимость от ядра, а дальше к проекту можно цеплять что угодно
  "require": {
    "php": ">=7.0.0",
    "lemurro/core": "^0"
  },

Плюс в том что движок можно легко обновлять как любую зависимость

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)