Composer : полезные команды

Разместил несколько наиболее применяемых и полезных команд, которые нужны каждому Composer-новичку

Установка пакета

Добавление гит-пакета heartcode/CanvasLoader, который не размещен на сайте packagist.org

1. нужно в файл composer.json добавить:

    "repositories":[
        ... тут могут быть уже существующие репозитории, а ниже прописываем новый
        {
            "type":"package",
            "package":{
                "name":"heartcode/CanvasLoader",
                "version":"1.2.3",
                "source":{
                    "type":"git",
                    "url":"http://github.com/heartcode/CanvasLoader",
                    "reference":"master"
                }
            }
        }
    ],

заметка: в reference можно указать имя ветки, коммит или даже тэг

Теперь пакет Composer будет думать, что пакет heartcode/CanvasLoader зарегистрирован на сайте packagist.org

Но, кроме этого пакет нужно добавить в require:

2. Добавление composer-пакета: 

    "require": {
        ...тут могут быть прописаны др. пакеты
        "heartcode/CanvasLoader": "1.*"
    },

а теперь в консоле выполните команду:

$ composer update heartcode/CanvasLoader

эта команда установит только heartcode/CanvasLoader, а все остальные пакеты обновлены не будут, это очень важно.


Удаление пакета

Удалите выше добавленные в файл composer.json упоминания о пакете и в консоле выполните команду:

$ composer update heartcode/CanvasLoader

и Composer удалит директорию из папки vendor, удачки.


Конфликт

Если композер говорит:

Your requirements could not be resolved to an installable set of packages.

например:

# composer update monolog/monolog --prefer-source
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for theorchard/monolog-cascade ^0.2.0 -> satisfiable by theorchard/monolog-cascade[0.2.0].
    - Conclusion: remove symfony/yaml v2.6.4
    - Conclusion: don't install symfony/yaml v2.6.4
    - theorchard/monolog-cascade 0.2.0 requires symfony/yaml ~2.7.0 -> satisfiable by symfony/yaml[v2.7.0, v2.7.1, v2.7.2, v2.7.3, v2.7.4].
    - Can only install one of: symfony/yaml[v2.7.0, v2.6.4].
    - Can only install one of: symfony/yaml[v2.7.1, v2.6.4].
    - Can only install one of: symfony/yaml[v2.7.2, v2.6.4].
    - Can only install one of: symfony/yaml[v2.7.3, v2.6.4].
    - Can only install one of: symfony/yaml[v2.7.4, v2.6.4].
    - Installation request for symfony/yaml == 2.6.4.0 -> satisfiable by symfony/yaml[v2.6.4].

т.е. нужно обновить так же symfony/yaml, а значит пишем:

composer update monolog/monolog symfony/yaml

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


Конфликт 2:

Если Вы добавляете в проект свой пакет, например:

$ composer update yapro/debug
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

Problem 1
- The requested package datravel/php-debug could not be found in any version, there may be a typo in the package name.

Potential causes:
- A typo in the package name
- The package is not available in a stable-enough version according to your minimum-stability setting
see <https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion> for more details.

Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.

то обратите внимание, возможно Вы в файле composer.json неправильно прописали минимально возможную версию, которую кстати можно узнать на сайте https://packagist.org/packages/yapro/debug (в настоящий момент версия пишется  слева, сразу ниже названия пакета и по-умолчанию dev-master. Например у меня было:

    "require": {
        "yapro/debug": "*"
    },

а стало:

    "require": {
        "yapro/debug": "dev-master"
    },

Конфликт 3

Кода у Вас vendor под git-ом, то Ваши вендоры могут не содержать директории .git и composer update скажет Вам:

[RuntimeException]
The .git directory is missing from /var/www/site/vendor/yapro/debug, see https://getcomposer.org/commit-deps for more information

самый простой способ решить данную проблему - установить зависимость заново:

rm -rf vendor/yapro/debug/

composer update yapro/debug

готово.

Оптимизация

p.s. не забывайте перед выкладкой на продакшен выполнять команду:

composer install -o
composer dump-autoload --optimize

и при сборке билда в докере:

composer install -o --no-scripts


Хитрость

Если Вы форкнули проект на гитхабе, создали ветку, сделали коммит в этой ветке и заслали PR, то не ждать же пока PR дойдет до вендора! Поэтому, в файл composer.json добавляем:

    "repositories":[
        ...
        {
            "type":"vcs",
            "url":"http://github.com/yapro/some-project"
        }
        ...
    ],
    ...
    "require": {
        ...
        "some-company/some-project": "my-branch",
        ...
    },

и выполняем команду обновления чужого проекта

composer update some-company/some-project

благодаря такой хитрости, composer сначала поищет ветку my-branch в репозитории http://github.com/yapro/some-project

Хитрость с BitBucket

Выглядит так же, как и выше описанный пример, однако, обратите внимание, чтобы composer не задавал нам вопросы авторизации в BitBucket, а использовал ssh-ключ доступа, мы укажим путь к репозиторию в виде git-ссылки:

    "repositories":[
        ...
        {
            "type":"vcs",
            "url":"git@bitbucket.org:lebnik/test-for-composer.git"
        }
        ...
    ],
    ...
    "require": {
        ...
        "lebnik/test-for-composer": "dev-master",
        ...
    },

При этом не забудьте в корень BitBucket-проекта положить файл composer.json с приблизительно таким содержимым:

{
  "name":        "lebnik/test-for-composer",
  "description": "Common classes",
  "version":     "0.0.7",
  "type":        "library",
  "keywords":    ["php", "common", "classes"],
  "homepage":    "https://bitbucket.org/lebnik/test-for-composer",
  "license":     "MIT",

  "autoload": {
    "psr-4": {
      "TestForComposer\\": "src/"
    }
  },

  "target-dir": ""
}

Минимальный конфиг:

{
  "name":        "mol/queue",
  "type":        "library",
  "autoload": {
    "psr-0": {
      "Queues" : "src"
    }
  }
}

И далее, как и раньше подключаем зависимость:

       {
           "type":"vcs",
           "url":"ssh://git@stash.combany.ru:5555/mol/queue.git"
       }

и внимание: если подключаемая ветка названа feature/SUPPORT-61, то указываем версию зависимости с префиксом dev-:

   "require": {
       "mol/queue": "dev-feature/SUPPORT-61",

Проблема с форком

Я форкнул репозиторий, который имеется в packagist.org, и воспользовался инструкцией:

{
    "name": "my.name/test",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/yapro/php-barcode-generator"
        }
    ],
    "require": {
        "yapro/php-barcode-generator": "v0.2.2"
    }
}

Однако, при выполнении команды composer update yapro/php-barcode-generator, я постоянно получал ошибку:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - The requested package gemotest/php-barcode-generator could not be found in any version, there may be a typo in the package name.

Potential causes:
 - A typo in the package name
 - The package is not available in a stable-enough version according to your minimum-stability setting
   see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.

Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.

И быть может, я неправильно прописал, но настройки минимально стабильной версии никак не помогли мне:

    "minimum-stability": "dev",
    "prefer-stable" : true,
    "require": {
        "yapro/php-barcode-generator": "v0.2.2*@dev"
    }

В итоге, пришлось отказаться от инструкции "type": "vcs", и воспользоваться "type":"package".

Источник: 1 - 2

Оцени публикацию:
  • 5,24
Оценили человек: 5
Теги : composer

Похожие статьи:


Комментарии посетителей:
  • в удалении пакетов ошибка... должно быть remove а не update
    05 мая 2017, 04:36 коммент полезен : +1 # Гость (гость)
Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2018 YaPro.Ru

Главная » Веб-мастеру » Unix »