@thekip
Php/C#/Js Developer

Как подключить приватные репозитории к зависимостям в Composer?

Мы используем Composer что бы подключать общие либы к проектам. Сами либы лежат как отдельные приватные репозитории в GitLab.
Обычно подключали все вот так:

{
  "require": {
    "yiisoft/yii": "1.1.15",
    "thc/hotels-catalog-rest-client": "dev-master"
  },
  "config": {
    "vendor-dir": "protected/vendor"
  },
  "repositories": [
    {
      "type": "git",
      "url": "http://gitlab.thcdev.ru/thc/hotels-catalog-rest-client.git"
    }
  ]
}


Для приватных проектов которых нет в Packagist прописывал путь к репозиторию вручную.

Но теперь эта либа зависит от другой приватной либы.

{
    "name": "thc/hotels-catalog-rest-client",
    "description": "Hotels Catalog Api Client",
    "classmap": ["/"],
    "require": {
		"thc/yii1-rest-client": "dev-master"
	},
	"repositories":[
        {
            "type":"git",
            "url":"http://gitlab.thcdev.ru/thc/yii1-rest-client.git"
        }
    ]
}


И композер наотрез отказывается ее видеть.

Problem 1
- thc/hotels-catalog-rest-client dev-master requires thc/yii1-rest-client dev-master -> no matching package found.
- thc/hotels-catalog-rest-client dev-master requires thc/yii1-rest-client dev-master -> no matching package found.
- Installation request for thc/hotels-catalog-rest-client dev-master -> satisfiable by thc/hotels-catalog-rest-client[dev-master].

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 for more details.

Read for further common problems.


Я предположил что это из-за того что Композер не читает секцию repositories у зависимостей (т.к. таким образом можно скомпрометировать чужой проект, подставив в своем репозитории зависимости с бэкдорами)

И перенес репозиторий из дочерней зависимости в основной файл. т.е. вот так:

{
  "require": {
    "yiisoft/yii": "1.1.15",
    "thc/hotels-catalog-rest-client": "dev-master"
  },
  "config": {
    "vendor-dir": "protected/vendor"
  },
  "repositories": [
    {
      "type": "git",
      "url": "http://gitlab.thcdev.ru/thc/hotels-catalog-rest-client.git"
    },
 {
      "type": "git",
     "url":"http://gitlab.thcdev.ru/thc/yii1-rest-client.git"
    }
  ]
}


но результат тот же. Композер наотрез отказывается видеть вложенную зависимость.
Кто ни будь знает как это решить?

PS
При этом если все эти зависимости перенести в основной проект, т.е. вот так:
{
  "require": {
    "yiisoft/yii": "1.1.15",
    "thc/hotels-catalog-rest-client": "dev-master",
    "thc/yii1-rest-client": "dev-master"
  },
  "config": {
    "vendor-dir": "protected/vendor"
  },
  "repositories": [
    {
      "type": "git",
      "url": "http://gitlab.thcdev.ru/thc/hotels-catalog-rest-client.git"
    },
 {
      "type": "git",
     "url":"http://gitlab.thcdev.ru/thc/yii1-rest-client.git"
    }
  ]
}


То все работает. Но зачем нам тогда менеджер зависимостей, если все прописывать руками?
  • Вопрос задан
  • 4523 просмотра
Пригласить эксперта
Ответы на вопрос 2
just_i
@just_i
php | js программист
https://toranproxy.com/ попробуйте это. Легко ставится, избавляет от выше описанных проблем. Может полностью проксировать все пакеты или же использоваться только для приватных репозиториев. Имеет веб интерфейс для добавления новых приватных репозиториев, что очень удобно.
Ответ написан
@thekip Автор вопроса
Php/C#/Js Developer
https://getcomposer.org/doc/04-schema.md#repositories

Нашел в документации что секция repositories является root-only, т.е. все секции repositories определенные во всех зависимостях игнорируются.

Я шел по верному пути, но все равно неясно почему прописав свой репозиторий в корневой composer.json оно не заработало.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы