Если у вас есть файлы, и вы не сможете продолжать использовать composer для управления этим пакетом (например, для обновлений, удаления и т. Д. c), тогда вам просто нужно обращаться с файлами, как будто они принадлежал вашему проекту.
Трудно дать вам подробности, не зная больше о пакете, который вы хотите использовать, но общий подход будет таким:
Скажем, пакет, который вы хотите использовать это funtastic/foobar
. Если у вас есть файлы из вашего старого vendor
, нам просто нужен каталог внутри vendor/funtastic
, который может называться foobar
.
Сначала скопируйте файлы в свой проект. Поскольку они принадлежат к другому пространству имен, чем остальная часть вашего приложения, я лично не стал бы помещать их в src
. Вы можете поместить их в новый каталог, например lib
.
Так что теперь ваша файловая структура будет выглядеть примерно так:
project-root-dir
├── public
│ └── index.php
├── vendor/
├── lib/
│ └── foobar/
│ └── some files ...
│ └── src/
├── composer.json
├── composer.lock
Теперь вам нужно проверить * 1018 пакета *, в частности, раздел autoload
. Это может быть что-то вроде:
"autoload": {
"psr-4": { "Funtastic\\FooBar\\": "src" }
}
Теперь вам нужно go до * вашего приложения, найти раздел autoload
и отредактировать его, включив в него Funtastic\FooBar
пространство имен. Предполагая, что у вас уже есть пространство имен App
:
"autoload": {
"psr-4": {
"App\\": "src/",
"Funtastic\\FooBar\\": "lib/foobar/src"
}
Кроме того, вам также необходимо проверить раздел require
исходного пакета и посмотреть, зависит ли он от какого-либо пакета, и добавить эти пакеты в приложение. Раздел "require" в его composer.json
.
Имея все это на месте и правильно отредактировав composer.json
, вы можете просто восстановить автозагрузчик (composer dump-autload
), и вы будете готовы к go.
Очевидно, что поскольку я не знаю специфики вашего пакета и проекта, вам придется адаптировать эти инструкции к вашему конкретному случаю c, но это не займет много времени, чтобы пакет работал внутри ваше приложение.
В качестве альтернативы, если вы хотите продолжить обрабатывать этот пакет, как если бы он был "внешней" зависимостью:
- Сжать все файлы пакета в
package.zip
и поместите его в base_dir/lib
- Добавьте следующее к вашему composer. json:
"repositories": [
{
"type": "package",
"package": {
"name": "vendor/name",
"version": "1.0",
"dist": {
"url": "lib/package.zip",
"type": "zip"
}
}
}
],
(Решение, изначально предложенное самим автором вопроса).
С T Его файлы будут существовать дважды в вашем проекте: как «хранилище» и установлены на vendor
, что я считаю менее чем идеальным. Вы также можете хранить файлы за пределами вашего проекта, но это потребует дополнительного отслеживания.
Я бы лично откусил пулю, если принять, что этот пакет больше не является внешней зависимостью, но файлы, которые должны поддерживаться разработчиком приложения .