запретить обновление Composer для переустановки - PullRequest
1 голос
/ 14 марта 2019

У меня есть проект Laravel с некоторыми зависимостями.Одной из таких зависимостей является наш собственный пакет.Мне нужно сделать работу над этим пакетом.Установка заключается в том, что я символически связываю наш пакет с репозиторием git.

vendor / acme / ourpackage -> ~ / ourpackagerepo

Я делаю изменения в репозитории, фиксирую и затем запускаю обновление Composer в родительском файле, чтобы получить обновленный composer.lock.Раньше это работало нормально.Но после того, как мы перешли с Gitlab на Github, composer update acme/ourpackage делает:

  • Удаление acme / ourpackage (dev-feature / fixedinformationlog fae89ac)
  • Установка acme / ourpackage (dev-feature /fixedinformationlog 9bd7d4d):

И, таким образом, перезаписать символическую ссылку!Затем я должен удалить папку и создать новую символическую ссылку, чтобы продолжать работать.Это хлопотно, в основном из-за того, что PHPStorm необходимо переиндексировать.

Фрагменты из composer.json:

"repositories": [{
  "type": "vcs",
  "url": "git@github.com:acme/package.git"


"config": {
    "preferred-install": "dist",
    "platform": {
        "php": "7.0.12"
    },
    "use-github-api": false

Любые идеи о том, как сделать так, чтобы композитор только обновлялся, или оставить файлы в покое.и только обновить composer.lock?

1 Ответ

1 голос
/ 14 марта 2019

Я думаю, у вас есть несколько вариантов здесь:

1.Пути к репозиторию Composer

Как указано @ Loek , вы можете использовать репозиторий path .Это существует для рассмотрения сценариев, которые обычно не попадают в VCS (систему контроля версий, такую ​​как Git) или как файловый артефакт.Согласно документации, вы используете это следующим образом:

{
    "repositories": [
        {
            "type": "path",
            "url": "../../packages/my-package",
            "options": {
                "symlink": true
            }
        }
    ],
    "require": {
        "my/package": "*"
    }
}

Самая важная часть, на которую следует обратить внимание, это:

Локальный пакет будет, если возможно, символически связан, в этом случае вывод в консоли будет читать символическую ссылку из ../../packages/my-package.Если символическая ссылка невозможна, пакет будет скопирован.В этом случае консоль будет выводить Mirrored из ../../packages/my-package.

Вместо стратегии по умолчанию для отката вы можете принудительно использовать символическую ссылку с «symlink»: true или зеркалированиес "символической ссылкой": ложная опция .Принудительное зеркалирование может быть полезно при развертывании или генерации пакета из монолитного репозитория.

Этот параметр наиболее важен для меня и является тем, с чем я лично согласился бы.

2.Несколько настроек Composer с переменными среды

Другой вариант - использовать переменную среды COMPOSER , как описано здесь .Это позволит вам загрузить файл composer.json, отличный от указанного по умолчанию.Таким образом, у вас может быть два файла, и в зависимости от того, какую переменную среды вы установите, он загрузит соответствующий файл и создаст соответствующий файл блокировки:

  • composer.json
  • composer-dev.json

Хорошо, так почему же вы захотите это сделать?Ну, из-за того, что вы пытаетесь работать над своим пакетом локально (с активной символической ссылкой), но не хотите, чтобы это происходило в рабочей среде, это может сработать, если первый вариант не сработает.

Следует отметить, что ваша цель всегда должна заключаться в том, чтобы иметь единую конфигурацию, которая работает одинаково в разных средах (например, локальная, промежуточная, производственная).Я понимаю, что вы хотите видеть локальные изменения в вашем репозитории сразу в вашем приложении, и проходить процесс commit / push / pull для каждого изменения просто смешно.


Дополнительное чтение / Ресурсы:

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