Использование PHP Composer для разработки локального пакета, а затем скопировать его при развертывании - PullRequest
1 голос
/ 29 сентября 2019

У меня есть локальный проект PHP (веб-сайт), и я хочу использовать другой проект, который я создал (крошечный веб-фреймворк), в качестве пакета Composer для проекта веб-сайта.Я разрабатываю их в тандеме, но хочу сохранить их как отдельные проекты;при развертывании веб-сайта я хочу использовать Composer для установки проекта фреймворка в виде пакета, точно так же, как и с Guzzle или любым другим обычным пакетом Composer.

В проекте веб-сайта есть следующее composer.json:

{
    "repositories": [
        {
            "type": "path",
            "url": "/local/path/to/framework/package"
            "options": {
                "symlink": true
            }
        }
    ],
    "require": {
        "my/framework": "dev-master",
        "guzzlehttp/guzzle": "6.3.3"
    }
}

В /local/path/to/framework/package/composer.json У меня есть:

{
    "name": "my/framework",
    "description": "A tiny framework.",
    "autoload": {
        "psr-4": {
            "MyFramework\\": "src"
        }
    }
}

Я запускаю php composer.phar update, и он устанавливает символическую ссылку на пакет фреймворка в моем проекте веб-сайта.Если я обновлю код в фреймворке, он сразу станет доступен для кода сайта.Это здорово.

Однако позже я хочу развернуть проект веб-сайта на своем веб-сервере.Для чистого развертывания у меня есть сценарий развертывания, который экспортирует архивную копию соответствующей ветки git repo веб-сайта, а затем запускает php composer.phar install, чтобы убедиться, что все необходимые пакеты установлены.С помощью вышеуказанного конфига сценарий развертывания создает символическую ссылку на пакет фреймворка, что, очевидно, бесполезно, когда артефакт развертывания архивируется и передается по scp на веб-сервер.

Если я удаляю symlink При указанном выше параметре мне нужно запускать php composer.phar update каждый раз, когда я делаю какие-либо изменения в пакете фреймворка, что раздражает, поскольку я разрабатываю пакеты в тандеме.Но затем при развертывании пакет копируется, а не является символической ссылкой;это хорошо для развертывания, за исключением того, что оно всегда копируется в ветку master (потому что я указал dev-master в composer.json).

Есть ли способ настроить Composer, чтобы я мог иметь удобстволокального symlinked пакета для разработки, но чтобы позволить сценарию развертывания получить чистую копию пакета Framework без необходимости изменять composer.json каждый раз, когда я хочу развернуть?

Я также пытался изменить тип репозиторияна vcs вместо path, но затем Composer клонирует репозиторий пакетов фреймворка, и мне действительно не нужен клон репозитория в моем локальном дереве vendor/, ни во время разработки, ни при развертывании,Я просто хочу иметь возможность иметь дерево ссылок (которое дает мне мгновенные обновления) во время разработки, и иметь чистый пакет, установленный для развертывания.

Возможно, мне придется смириться с тем, чтобы должным образом разработать проект фреймворка,«То есть как пакет Composer, который я помечаю фактическими номерами версий выпуска, а затем обновляю проект моего веб-сайта, чтобы использовать определенную версию, когда наступает время для развертывания.Я до сих пор не нашел самый простой способ сделать это.

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете использовать плагин Composer Studio .

Он использует отдельный файл для конфигурации и позволяет создавать символические ссылки в процессе разработки и обычную установку Composer для развертывания prod, не касаясь composer.json.

С его помощью ваш сайт composer.json будет выглядеть как обычный файл:

{
    "require": {
        "my/framework": "dev-master",
        "guzzlehttp/guzzle": "6.3.3"
    }
}

И с studio.json в корне проекта со следующим содержанием:

{
    "version": 2,
    "paths": [
        "/local/path/to/framework/package"
    ]
}

Вы можете указать плагину, где найти my/framework.Затем Studio выполнит символическую ссылку на пакеты из указанных путей.

Чтобы выполнить обычную установку, просто удалите или переименуйте studio.json, удалите папку vendor и файл composer.lock и снова запустите установку при развертывании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...