Другие решения
Я должен был сделать это для FTP-сервера, к которому у меня не было доступа SSH. Сайт, указанный здесь, работал, тогда я понял, что вы можете просто установить композитор на свой собственный сервер (используя версию PHP вашей цели), а затем скопировать все файлы.
2
Это не окончательное решение, но для меня это было большой помощью в большинстве случаев:https://github.com/Wilkins/composer-file-loader
Я знаю, что вопрос старый, но я надеюсь, что он кому-нибудь поможет.
2
Я использую общий хостинг для веб-сайта и не могу выполнять команды там. Помимо запуска composer через php-скрипт, который я запрашиваю через браузер, я обычно использую этот рабочий процесс:
- Убедитесь, что у вас установлен php локально.
- Сделать каталог на рабочем столе.
- скачать composer.phar из https://getcomposer.org/download/ (под заголовком * Ручная загрузка) и поместите его в каталог.
- сделать файл composer.json вставьте в него следующее содержимое
- Перейдите в каталог с выбранной оболочкой (bash, git-bash, cmd, windows bash)
- тип
- Загрузите каталог вендора на свой веб-сервер через ftp или любой другой механизм, который вы используете.
- включите в ваш проект php, куда вы загружаете свои библиотеки (измените путь туда, куда вы загрузили каталог поставщика, чтобы он включал этот файл автозагрузки)
Таким образом, вы получаете преимущества управления зависимостями, и вам не нужно вручную включать весь gazillion файлов и загружать все зависимости вручную, а обновлять их так же просто, как печатать а затем замените каталог поставщика на вашем сервере новым.
4: Сценарий автозагрузки
Также Composer использует сценарий autoload, который можно добавить в проект для поддержки автозагрузки. Он упрощает работу с зависимостями и определяет собственные пространства имен.
Нужно просто добавить файл vendor/autoload.php в скрипты PHP перед установкой класса.
Вернёмся к тестовому приложению slugify. Создайте скрипт test.php и задайте в нём библиотеку cocur/slugify:
Добавьте в файл код, который запустит vendor/autoload.php, загрузит зависимость cocur/slugify и использует ее для преобразования текста.
Сохраните и закройте файл.
Запустите сценарий:
Он выдаст:
Часть вторая. Установка. Самое интересное тут
Вы, точно, очень хорошо знакомы с той CMS с которой работаете, а значит знаете все тонкости установки модулей в ней. В 1С-Битрикс установка модулей проходит в 2 этапа:
- размещение исходного кода модуля в определенной директории
- Вызов функции RegisterModule(.). Как правило все действия установки модуля описываются в методе DoInstall класса, отвечающего за установку и удаления модуля.
Часть два один. Прячем пакеты в надежное место
По-умолчанию composer устанавливает все пакеты в каталог если композер размещен в корне проекта, и не выполняет никаких хуков в Ваших пакетах. Но это легко изменить.
Нам необходимо в корне проекта разместить файл composer.json:
В 1C-Битрикс код, написанный разработчиками, обычно, размещают в директории . Поэтому мы перенесли туда папку записью в секции config. Теперь все пакеты сторонних разработчиков будут размещаться там. Но наши модули необходимо размещать в директории , что-же делать?
Часть два два. Плагин установки модулей
У composer есть несколько типов пакетов, один из которых composer-plugin — это расширения для самого композера. Чтобы наши модули устанавливались так, как этого требует CMS нам нужно написать свой плагин. Для этого создаем отдельный проект и в его корне размещаем composer.json:
В этом файле есть 3 ключевых момента:
- «type»: «composer-plugin» — говорит композеру, что это плагин
- autoload — описывает правила автозагрузки классов
- extra — указывает какой класс является плагином
Плагин будет состоять из двух классов:
- непосредственно сам плагин. Он будет добавлять в composer собственный инсталлятор
- инсталлятор, который и будет заниматься установкой модулей
Плагин выполняет просто добавление инсталлятора (файл: Plugin.php)
Далее сам инсталятор (класс ). Класс должен наследоваться от и содержать следующие методы:
- supports — возвращает true если инсталлятор поддерживает данный тип пакетов
- getInstallPath — возвращает путь, по которому необходимо разместить исходный код пакета
- install/uninstall/update — хуки установки/удаления/обновления пакета
Все наши модули будут иметь тип bitrix-module и именно с ними должен работать инсталятор.
Я решил сохранить целостность имени модуля (оно состоит из company_name и mod_name разделенных точкой) и именую пакеты или . Если мы возьмем имя пакета и разобьем по слешу, то вторая часть и будет именем модуля
Методы initBitrix и getModule реализуют работу с API 1C-Битрикс для установки модуля. Метод реализуется исходя из того, какая у Вас CMS и как вы выпускаете обновления модулей и как планируете их выполнять (файл: Bitrix.php).
После того, как вы проверили работу плагина, код можно заливать на GitHub и регистрировать в Packagist.
Часть два три. Модуль
Вернемся к самому модулю, который мы упомянули в первой части. а точнее к его composer.json.
Имя модуля должно соответствовать требованиям CMS, тип должен быть указан тот, с которым работает инсталлятор (в нашем случае bitrix-module) и в зависимостях у модуля должен быть плагин (секция require). После создания самого модуля и проверки его работы заливаем его код на GitHub и регистрируем в Packagist.
Часть два четыре. использование
Напомню, что сам проект (сайт) имеет примерно следующий composer.json
теперь мы можем перечислить в секции require все необходимые нам модули или вызвать команду
В полной мере ощутить полезность проделанной работы можно, если Вам предстоит, например, добавить в проект модуль авторизации с отправкой пароля в SMS
Сам модуль содержит код, который отвечает за логику авторизации, включать в него код отправки SMS не стоит, ведь отправку SMS выполняют и другие модули, например модуль уведомлений, значит SMS лучше сделать отдельным модулем, чтобы его код не дублировать. Так же и REST сервис. Его тоже могут использовать другие модули. И при всей этой непростой схеме, когда ваш модуль тянет за собой еще четыре, его установка остаётся всё такой же простой. Просто выполните одну команду:
А что и в какой последовательности скачивать и устанавливать позвольте решить композеру.
Часть первая. Публичное размещение модулей
Первая задача, которую нужно решить, это где хранить модули. Исходные коды модулей можно хранить в любом git, mercurial или svn репозитории. Для публичных модулей я рекомендую GitHub. На GitHub у вас будет возможность легко просматривать исходные коды и поддерживать документацию в формате Markdown. Для использования composer Вам необходимо создать и наполнить информацией файл composer.json. Это можно сделать в редакторе, в вашей IDE или вызовом команды composer init. Здесь и далее я не буду углубляться в базовые возможности и команды composer, если Вы плохо знакомы с composer, прочитайте эту статью.
После того как Вы создали свой модуль (для примера пока пустой) и разместили его код на GitHub, Вам необходимо зарегистрировать модуль на сайте packagist.org. Packagist предложит Вам настроить хуки GitHub так, чтобы при попадании изменений в репозиторий, на packagist.org обновлялись сведения о модуле.
2: Загрузка и установка Composer
Composer предоставляет написанный на PHP инсталлятор. Перейдите в домашний каталог и извлеките инсталлятор при помощи curl:
Запустите скрипт PHP, чтобы убедиться, что хэш SHA-384 пакета совпадает с хэшем инсталлятора, указанным на этой странице. Скопируйте хэш и поместите его в переменную оболочки:
Примечание: Замените выделенное красным значение своим хэшем.
А затем запустите скрипт PHP:
Если значения совпали, команда вернёт:
Если команда вернула Installer corrupt, загрузите скрипт снова и повторите проверку. Когда хэш совпадет, вы сможете продолжить работу.
Чтобы выполнить глобальную установку composer, введите:
Эта команда загрузит пакет менеджера Composer и выполнит его глобальную установку в /usr/local/bin, после чего в системе появится общедоступная команда composer. Вывод будет выглядеть так:
Чтобы убедиться в том, то установка прошла успешно, запустите команду:
Она должна вернуть:
Это значит, что менеджер зависимостей Composer был успешно установлен.
Примечание: Также менеджер Composer можно установить индивидуально для каждого отдельного проекта. Локальный вариант установки особенно хорош в том случае, если пользователь не имеет права выполнять общесистемную установку программы. Чтобы установить Composer локально, загрузите пакет и проверьте его подлинность (как показано выше), а затем запустите:
Команда сгенерирует файл composer.phar в локальном каталоге. Его можно запустить с помощью команды:
Installation — Windows#
Using the Installer
This is the easiest way to get Composer set up on your machine.
Download and run
Composer-Setup.exe. It will
install the latest Composer version and set up your PATH so that you can
call from any directory in your command line.
Manual Installation
Change to a directory on your and run the installer following
the Download page instructions
to download .
Create a new file alongside :
Add the directory to your PATH environment variable if it isn’t already.
For information on changing your PATH variable, please see
this article and/or
use your search engine of choice.
Close your current terminal. Test usage with a new terminal:
3: Использование Composer в проекте PHP
Проекты PHP часто зависят от внешних библиотек, управлять зависимостями и версиями которых бывает непросто. Composer может упростить отслеживание и установку новых версий и зависимостей.
Чтобы интегрировать Composer в свой проект, вам нужен файл composer.json. Он содержит информацию о зависимостях, которые должен скачать Composer для определённого проекта. Он позволяет задать необходимые версии зависимостей и исключить их нестабильные и потенциально опасные версии.
Этот файл не рекомендуется создавать вручную, поскольку при этом можно допустить ошибку в синтаксисе. Composer автоматически создаст файл composer.json после того, как вы добавите первую зависимость при помощи команды require. Остальные зависимости можно добавить с помощью этой же команды, и при этом нет необходимости вручную редактировать файл.
Процесс установки зависимостей проекта при помощи Composer состоит из следующих этапов:
- Определение необходимых приложению библиотек.
- Поиск подходящей открытой библиотеки в Packagist.org, официальном репозитории Composer.
- Выбор зависимостей.
- Запуск команды composer require, которая добавляет зависимости в файл composer.json и устанавливает пакеты.
Рассмотрим этот процесс на примере простого приложения.
Цель этого приложения – превратить заданное предложение в «понятный» URL (или slug); как правило, это приложение используется для преобразования названий страниц в URL-адреса (к примеру, обратите внимание на последний сегмент URL-адреса этого урока). Итак, создайте каталог проекта; для примера назовём его slugify:
Итак, создайте каталог проекта; для примера назовём его slugify:
Теперь попробуйте найти пакет, генерирующий slug-адреса, в репозитории Packagist.org. Просто введите в поле поиска запрос slug.
Справа возле каждого результата поиска можно увидеть два счётчика. Первый показывает, сколько раз пакет был установлен; второй счётчик показывает, сколько раз пакет был отмечен на GitHub. Результат поиска можно переупорядочить согласно показателю одного из счётчиков. Конечно, пакеты с большим показателем счётчиков, как правило, более стабильны, так как они чаще используются
Также важно проверить описание пакета – действительно ли это нужный пакет?
Сейчас нам нужно найти простой конвертёр адресов. В мануале мы используем пакет cocur/slugify.
Обратите внимание: Packagist указывает имя вендора и имя пакета (vendor name и package name). Каждому пакету присваивается уникальный идентификатор, или пространство имён (в том же формате, что и для репозиториев Github: vendor/package)
Необходимый пакет называется cocur/slugify. Чтобы загрузить пакет автоматически, нужно указать менеджеру зависимостей пространство имён пакета.
Итак, теперь вам известно точное имя пакета. Используйте команду composer require, чтобы добавить этот пакет в файл composer.json:
Как видите, Composer автоматически определяет необходимую версию пакета. Проверьте каталог проекта, теперь он содержит два файла (composer.json и composer.lock) и каталог vendor:
Файл composer.lock используется для хранения данных о версиях установленных пакетов и обеспечивает использование одинаковых версий пакетов в случае клонирования проекта. Каталог vendor содержит зависимости проекта.
В случае использования контроля версий не отправляйте сообщения о коммитах каталога vendor; это применимо только для файлов composer.json и composer.lock.
Примечание: При установке проекта, который уже содержит файл composer.json, используйте следующую команду, чтобы установить зависимости проекта:
Теперь давайте посмотрим на ограничения версий. Файл composer.json содержит примерно такой код:
Обратите внимание на знак вставки (^) перед номером версии. Для определения версии пакета Composer может использовать несколько типов ограничений и форматов; эта функция позволяет следить за стабильностью проекта
Оператор ^ используется в файле composer.json для максимальной совместимости версий. В данном случае он определяет версию 3.1 как минимальную и разрешает обновления до версии 4.0.
В целом, вам не придётся особенно долго возиться с ограничениями версий в файле composer.json. Однако в некоторых ситуациях может потребоваться отредактировать ограничения вручную (например, если вышла новая версия библиотеки, но composer.json не разрешает обновиться до неё).
Эта таблица поможет разобраться в том, как работают ограничения версий Composer:
Ограничение | Значение |
^1.0 | >= 1.0 |
^1.1.0 | >= 1.1.0 |
~1.0 | >= 1.0 |
~1.0.0 | >= 1.0.0 |
1.2.1 | 1.2.1 |
1.* | >= 1.0 |
1.2.* | >= 1.2 |
Подробнее об ограничениях версий можно прочесть в документации программы.
Использование Composer
Для того чтобы указать какие пакеты нужно устанавливать используется конфигурационный файл composer.json. В нем сообщаются зависимости вашего проекта, а также их версии. Создайте этот файл в корневой папке вашего проекта. Синтаксис записей очень прост, и если вы раньше имели дело с JSON, то без проблем разберетесь:
{«require»: {«производитель/пакет»: «версия»}»require-dev»: {«производитель/пакет»: «версия»}}
Секция require отвечает за пакеты, необходимые для работы программы, а require-dev — только за пакеты для разработки. Например, для нашего проекта необходимо установить библиотеку работы с RSS Atom — picofeed. Для этого сначала откройте сайт https://packagist.org и найдите этот пакет:
На его странице вы можете видеть команду composer, которой его можно установить, в ней полное имя, а чуть ниже версию:
Наш файл будет выглядеть вот так:
Для того чтобы установить все пакеты, описанные в файле конфигурации, используйте команду:
После установки пакетов composer создает файл autoload.php в папке vendor вашего проекта, с помощью него можно включить в проект все библиотеки, которые были установлены. Для этого достаточно подключить этот файл к проекту с помощью инструкции include или require:
Например, возьмем небольшой пример чтения ленты rss с GitHub:
require(«vendor/autoload.php»);
use PicoFeed\Reader\Reader;
use PicoFeed\PicoFeedException;
try {
$reader = new Reader;
// Return a resource
$resource = $reader->download(‘https://losst.ru/feed/’);
// Return the right parser instance according to the feed format
$parser = $reader->getParser(
$resource->getUrl(),
$resource->getContent(),
$resource->getEncoding()
);
// Return a Feed object
$feed = $parser->execute();
// Print the feed properties with the magic method __toString()
echo $feed;
}
catch (PicoFeedException $e) {
// Do Something…
}
?>
Вы можете управлять зависимостями не только с помощью конфигурационного файла. Composer имеет несколько команд для легкого управления. Чтобы добавить пакет в зависимости проекта используйте команду require:
Пакет сразу же будет установлен. А теперь вы его можете удалить:
Если версии пакетов устарели, то вы можете их обновить с помощью одной команды:
Решение
файл перечисляет зависимости. В вашем примере:
Затем вы должны найти соответствующие пакеты в packagist сайт. Повторите тот же процесс для каждой зависимости: найдите дополнительные зависимости в их соответствующих файлы и поиск снова.
Когда у вас наконец появится полный список необходимых пакетов, вам нужно будет установить их все по одному. По большей части, это просто вопрос размещения файлов в каталоге вашего проекта. Но вы также должны убедиться, что PHP может найти необходимые классы. Поскольку вы не используете автозагрузчик Composer, вам необходимо добавить их в свой собственный автозагрузчик. Вы можете выяснить информацию из соответствующих файлы, например:
Если вы не используете автозагрузчик классов, вам необходимо выяснить заявления
Вам, вероятно, понадобится много проб и ошибок, потому что большинству авторов библиотеки это не важно
Кроме того, и на всякий случай есть путаница по этому поводу:
- Composer имеет официальный установщик графического интерфейса для Windows и скопировать и вставить процедура установки из командной строки для всех платформ.
- Composer может быть запущен локально, а его выход просто загружен в другом месте. Вам не нужен SSH в вашем общем хостинге.
- Команду, необходимую для установки библиотеки, можно скопировать и вставить с веб-сайта пакета — даже если сопровождающий пакета не позаботился о ее документировании, packagist.org генерирует ее по умолчанию.
Composer не идеален и подходит не для всех случаев использования, но когда дело доходит до установки библиотеки, которая на него опирается, это, несомненно, лучшая альтернатива, и она довольно приличная.
Я проверил другие ответы, которые пришли после моего. Они в основном делятся на две категории:
- Установите библиотеку и напишите собственный скрипт загрузки
- Используйте онлайн веб-интерфейс для Composer
Если я что-то не упустил, никто из них не рассматривает жалобы, высказанные ФП:
- Кривая обучения
- Использование стороннего программного обеспечения
- Возможность разработки прямо на сервере (я полагаю, используя SSH)
- Потенциально глубокое дерево зависимостей
16
Часть третья. Приватные модули
Друзья, если во всем вышеописанном Вам не нравится, что Ваши модули будут в открытом доступе, то мы сейчас это быстро исправим. чтобы организовать приветное хранение модулей вам понадобится два инструмента:
- GitLab — это аналог GitHub который Вы можете скачать и установить на свои сервера.
- Satis — это генератор репозитория, с которым сможет работать композер.
Для начала установите GitLab и перенесите в него исходные коды Ваших модулей. после установите Satis и опишите все ваши модули в satis.json
В GitLab нужно создать токен, которому будет доступно api и указать его в satis.json. После всех этих манипуляций выполните команду:
И в папке web получите статический репозиторий, который можно опубликовать по адресу https://composer..ru/.
composer.json сайта будет отличатся лишь тем, что в нем будет присутствовать секция repositories
Installation — Linux / Unix / macOS#
Downloading the Composer Executable
Composer offers a convenient installer that you can execute directly from the
command line. Feel free to download this file
or review it on GitHub
if you wish to know more about the inner workings of the installer. The source
is plain PHP.
There are in short, two ways to install Composer. Locally as part of your
project, or globally as a system wide executable.
Locally
To install Composer locally, run the installer in your project directory. See
the Download page for instructions.
The installer will check a few PHP settings and then download
to your working directory. This file is the Composer binary. It is a PHAR
(PHP archive), which is an archive format for PHP which can be run on
the command line, amongst other things.
Now run in order to run Composer.
You can install Composer to a specific directory by using the
option and additionally (re)name it as well using the option. When
running the installer when following
the Download page instructions add the
following parameters:
Now run in order to run Composer.
Globally
You can place the Composer PHAR anywhere you wish. If you put it in a directory
that is part of your , you can access it globally. On Unix systems you
can even make it executable and invoke it without directly using the
interpreter.
After running the installer following the Download page instructions
you can run this to move composer.phar to a directory that is in your path:
If you like to install it only for your user and avoid requiring root permissions,
you can use instead which is available by default on some
Linux distributions.
Now run in order to run Composer instead of .
Laravel
composer global require «laravel/installer»
1 | composer globalrequire»laravel/installer» |
Описание команд Composer
Команда Composer | Описание команды |
---|---|
Добавляет требуемый пакет в файл и устанавливает его в ваш проект.
Команда изменяет , находящийся в текущей папке. Если пакету требуются зависимости, то они будут установлены или обновлены. А также будет обновлён . |
|
Если файла нет, резолвит зависимости исходя из и создаёт его. Далее, анализирует файл , скачивает и устанавливает указанные в нём версии пакетов. Опция полезна для обхода запуска скриптов, указанных в pre- и post- настройках. |
|
Обновляет ваши зависимости до последних версий и обновляет .
Команда резолвит зависимости чтобы получить самые последние версии зависящих друг от друга пакетов. |
|
Иногда, вы можете получить такое предупреждение:
Это может произойти после того, как вы вручную редактировали (добавляли или изменяли , , и т. д.). Даже если ваши изменения незначимы для Composer, он обнаруживает, что md5sum файла изменена, и предупреждает, что эти изменения не учтены в файле . Поэтому, чтобы подавить это предупреждение, вы можете просто запустить команду для обновления lock-файла без обновления самих пакетов. |
|
Если вам нужно обновить загрузчик, т. к. появились новые классы, вы можете выполнить команду чтобы избежать установки или обновления пакетов.
Используйте ключ —optimize для преобразования PSR-0 в автозагрузку как для classmap, чтобы автозагрузчик был наиболее быстрым. Это настоятельно рекомендуется для production (вы можете получить 20% прирост), но может занять немного времени для запуска, так что это на данный момент не сделано по умолчанию. Также вы можете использовать псевдоним. |
|
Краткая информация о Composer. | |
Создать архив для указанного пакета. Команда также может быть использована для архивирования всего проекта без исключенных/игнорируемых файлов. | |
Псевдоним для , открывает URL пакета или его домашнюю страницу в браузере. | |
Псевдоним команды , очищает внутренний кэш пакетов Composer-а. | |
Позволяет редактировать некоторые основные параметры Composer-а либо в локальном файле composer.json, либо в глобальном файле config.json. | |
Создать новый проект из указанного пакета в указанном каталоге. | |
Сообщает вам какие другие пакеты зависят от конкретного (указанного) пакета. Вы можете указать какие типы связей (require, require-dev) должны быть включены в листинг. По умолчанию выводятся оба. | |
Если вы считаете, что нашли ошибку, или что-то ведет себя странно, возможно, вы захотите выполнить команду диагностики для выполнения автоматизированной проверки многих общих проблем. | |
Команда global позволяет другие команды такие, как , или запускать так, как если бы вы запускали их из каталога .
Это может использоваться для того, чтобы установить командные утилиты глобально. Если вы добавите в переменную вашего окружения, то запуск утилит станет совсем простым. |
|
Отображает справки для всех других команд: . | |
Создает базовый вариант файла в текущем каталоге.
При запуске команды, Composer будет интерактивно запрашивать значения полей для заполнения, используя при этом для некоторых полей умные значения по умолчанию. |
|
Показать информацию о лицензиях зависимостей. | |
Выводит список допустимых команд. | |
Удаляет пакет из секций require или require-dev: . | |
Запустить вручную скрипты, объявленные в . Просто передайте название скрипта и при необходимости , чтобы отключить режим dev. | |
Поиск пакетов.
Команда поиска позволяет вам искать в репозиториях текущего проекта (см. секцию «repositories» в ). Обычно это будет только packagist.org. Вам нужно просто передать команде слова для поиска. |
|
Обновление самого до последней версии.
Запуск команды может решить некоторые проблемы и сэкономить ваше время. Также вы можете использовать псевдоним . |
|
Список всех установленных пакетов (). Список всех доступных пакетов (). Инфо об указанном пакете или его специфичной версии (). |
|
Выводит список всех пакетов, предложенных установленными. Опционально вы можете передать одно или несколько имён пакетов в формате чтобы ограничить вывод только теми, что были предложены указанными. | |
Если вам часто приходится модифицировать код своих зависимостей, а они были установленны «из исходников» (см. опцию команды ), то команда позволит вам проверить есть ли у вас локальные изменения в любой из них. |
|
Проверяет файл .
Вы всегда должны запускать команду перед тем, как коммитить ваш и перед установкой релизного тега. Эта команда проверит его на ошибки. |