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

Новые заметки:

Про что мы забываем когда делаем оценку задачи по времени

Список вопросов для собеседования разработчика по телефону

Symfony2 авторизация без Doctrine2 для чайника

Phpstorm7 LiveEdit

Жесткий хабр или не хабр, тогда кто?

Яндекс.Деньги мошенничество

Как узнать какие страницы в поиске яндекса или это секрет

Последние комменты:

Yapro CMS:

Здравствуйте, Гость | Войти | Регистрация | Карта сайта | RSS ленты | Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter

youtube.com/watch?v=7hFivbgIEqk

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

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