Как установить мой проект github в корневой каталог с помощью композитора?

Я делаю обработчик запросов для php, который будет направлять запросы к определенным файлам на сервере. У меня есть файл .htaccess, который направляет каждый запрос в DOCUMENT_ROOT/Server/handleRequest.php, который затем обрабатывает все остальное оттуда. Чтобы это работало, я копирую файл .htaccess и папку Server в корневую папку своего сайта.

Мне удалось заставить композитора установить мой проект в каталог поставщика под vendor/JakarCo/PHP-Request-Handler. Я хотел бы, чтобы все файлы (по крайней мере, файл .htaccess) были установлены непосредственно в корневую папку документов сайта (на один уровень выше папки поставщика).

Я пытаюсь использовать oomphinc/composer-installers-extender для установки пользовательского пути, и он не работает, и я не могу понять, как это исправить.

composer.json в обработчике запросов

{
    "name": "JakarCo/PHP-Request-Handler",
    "description": "php request handler",
    "type": "library",
    "license": "proprietary",
    "require": {
        "php": "^5.3.6 || ^7.0",
        "oomphinc/composer-installers-extender": "@dev"
    },
    "extra": {
        "installer-types": ["library"],
        "installer-paths": {
            "my/path/": ["JakarCo/PHP-Request-Handler/"],
            "path/to/libraries/JakarCo/": ["type:library"]
        }  
    }
}

composer.json для проекта, включающего обработчик запросов:

{
    "repositories": [
        {
            "url": "https://github.com/JakarCo/PHP-Request-Handler",
            "type": "vcs"
        }
    ],
    "require": {
        "JakarCo/PHP-Request-Handler": "dev-master"
    }
}

Когда я запускаю composer update из корневой папки сайта, он работает успешно (теперь ничего не меняется). Поэтому я удалил папку поставщика и файл composer.lock и запустил composer install, и у меня было три успешных установки: composer/installer, oomphinc и моя. Но мой все еще идет в vendor/JakarCo/PHP-Request-Handler, когда папку Server и .htaccess файлов нужно зайти в корневую папку сайта.

Я подозреваю, что моя проблема связана с installer-paths, но я не могу понять, как это должно быть. Кроме того, я, вероятно, не должен использовать @dev для версии oomphinc, но я не знаю, что еще поставить.

У меня есть опыт работы с PHP, но я очень неопытен, и я новичок в использовании композитора и git.


person Reed    schedule 19.09.2018    source источник
comment
Кроме того, обработчик запросов — это очень ранняя версия, и я знаю, что есть что улучшить. Если я не могу заставить работать установку композитора, я могу вручную скопировать и вставить файл .htaccess и использовать классы с пространством имен для других документов и использовать автозагрузчик. Но это то, чем я лучше займусь позже.   -  person Reed    schedule 19.09.2018
comment
Почему вы устанавливаете его как зависимость/библиотеку, если он должен работать как проект?   -  person rob006    schedule 20.09.2018
comment
@ rob006 Я попытался установить тип как проект, но, похоже, ничего не изменилось. Документация действительно ничего не прояснила. Хотя сейчас я больше читаю. Я действительно не понимаю, как он использует разные типы.   -  person Reed    schedule 21.09.2018


Ответы (1)


ОБНОВЛЕНИЕ

Это оказалось плохо. Очень плохо, лол. Файл composer.json из проекта обработчика запросов перезаписал файл composer.json, который я использовал для его включения.

--

Я написал свой собственный установщик, используя https://getcomposer.org/doc/articles/custom-installers.md в качестве руководства, просто скопируйте и вставьте то, что у них было.

Важные примечания: composer.json для сайта, над которым я работаю, требует указателя на обработчик запросов и указателя на установщик обработчика запросов, как показано ниже. Я пытался поместить указатель на установщик в проект обработчика запросов, но позже прочитал, что часть repositories читается только корневым композитором. То есть файл composer.json в рабочем каталоге, из которого вы вызываете composer install/composer update. Кроме того, проект установщика можно добавить в packagegist, тогда проект обработчика запросов сможет запросить его напрямую.

Мне было трудно заставить установщик начать работать. Это связано с тем, что $packageType передается в supports() в программе установки в нижнем регистре, а указанный мной тип включает верхний регистр, поэтому return $packageType === 'JakarCo-request-installer превратилось в `return $packageType == strtolower('JakarCo-request-installer').

Еще одна проблема, с которой я столкнулся, заключалась в том, что композитор сказал мне, что имя каталога, возвращаемое getInstallPath, не может быть пустым, когда я выполнял return '/'. Я перешел на return ./ и все еще были проблемы. Я сделал composer clear-cache, затем rm -rf vendor, затем rm composer.lock, затем перезапустил composer install, и теперь он работает.

Все это могло бы быть намного лучше, но пока мне нужен только базовый функционал. Позже я улучшу качество своего кода. Я новичок в композиторе, и все это ошеломляет, и мне трудно следовать документации.

{
  "repositories": [
      {
        "type": "vcs",
        "url": "https://github.com/JakarCo/PHP-Request-Handler"
      },
      {
        "type": "vcs",
        "url": "https://github.com/JakarCo/PHP-Request-Handler-Installer"
      }
  ],
  "require": {
    "JakarCo/PHP-Request-Handler": "dev-master",
    "JakarCo/PHP-Request-Handler-Installer": "dev-master"
  }
}

Итак, репозитории должны были быть определены в проекте сайта. Определение репозиториев в проекте обработчика запросов ничего не дало, а затем не удалось найти Request-handler-installer, потому что композитор не работает рекурсивно в этом вопросе, если только ваши проекты не находятся в пакете, и в этом случае вы не определяете репозитории. Раздражает, но работает.

person Reed    schedule 19.09.2018