{"id":20336642,"url":"https://github.com/fi1a/installers","last_synced_at":"2026-04-20T04:31:30.377Z","repository":{"id":62728460,"uuid":"561992377","full_name":"fi1a/installers","owner":"fi1a","description":"Установка и обновление пакетов через composer для фреймворков","archived":false,"fork":false,"pushed_at":"2023-03-15T08:21:06.000Z","size":53,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-14T17:57:04.682Z","etag":null,"topics":["bitrix","bitrix-module","composer","installers","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fi1a.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-05T01:25:31.000Z","updated_at":"2023-01-31T20:50:05.000Z","dependencies_parsed_at":"2025-01-14T16:53:11.649Z","dependency_job_id":null,"html_url":"https://github.com/fi1a/installers","commit_stats":{"total_commits":36,"total_committers":2,"mean_commits":18.0,"dds":0.02777777777777779,"last_synced_commit":"11f27c3051196881d650e5bce2251c3717cbe209"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fi1a%2Finstallers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fi1a%2Finstallers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fi1a%2Finstallers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fi1a%2Finstallers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fi1a","download_url":"https://codeload.github.com/fi1a/installers/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241859598,"owners_count":20032318,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitrix","bitrix-module","composer","installers","php"],"created_at":"2024-11-14T21:06:15.077Z","updated_at":"2026-04-20T04:31:25.348Z","avatar_url":"https://github.com/fi1a.png","language":"PHP","readme":"# Установка и обновление пакетов через composer для фреймворков\n\n[![Latest Version][badge-release]][packagist]\n[![Software License][badge-license]][license]\n[![PHP Version][badge-php]][php]\n![Coverage Status][badge-coverage]\n[![Total Downloads][badge-downloads]][downloads]\n[![Support mail][badge-mail]][mail]\n\nЭта библиотека осуществляет установку, обновление и удаление пакетов на основе типа через composer для фреймворков.\nИмеется возможность настроить путь установки для каждого пакета.\nПомимо размещения по нужному пути осуществляется установка пакета в фреймворке, если устанавлевыемый пакет поддерживает это.\n\n## Поддерживаемые типы пакетов\n\n| Framework | Types              |\n|-----------|--------------------|\n| Bitrix    | `bitrix-d7-module` |\n\n## Пример composer.json файла\n\nВ файле composer.json необходимо указать тип пакета \"type\": \"bitrix-d7-module\" и подключить пакет «require»: { \"fi1a/installers\": \"^2.0\" }.\n\n```json\n{\n \"name\": \"foo/bar\",\n \"type\": \"bitrix-d7-module\",\n \"require\": {\n  \"fi1a/installers\": \"^2.0\"\n }\n}\n```\n\nЭто установит ваш пакет в папку с модулями 1С-Битрикс, когда пользователь запустит установку.\n\n## Пользовательские пути установки\n\nДоступные переменные для использования в путях: {{vendor}}, {{name}}.\n\nВы можете указать путь для установки в `composer.json` для пакетов:\n\n```json\n{\n \"extra\": {\n  \"installer-paths\": {\n    \"bitrix/modules/{{vendor}}.{{name}}\": [\"foo/bar\", \"baz/qux\"]\n  }\n }\n}\n```\n\nВы можете указать путь для установки в `composer.json` для определенных типов пакетов:\n\n```json\n{\n \"extra\": {\n  \"installer-paths\": {\n    \"bitrix/modules/{{vendor}}.{{name}}\": [\"type:bitrix-d7-module\"]\n  }\n }\n}\n```\n\nВы можете указать путь для установки в `composer.json` для определенного vendor:\n\n```json\n{\n \"extra\": {\n  \"installer-paths\": {\n    \"bitrix/modules/{{vendor}}.{{name}}\": [\"vendor:foo\"]\n  }\n }\n}\n```\n\n## Установка через composer модуля 1С-Битрикс (тип пакета bitrix-d7-module)\n\nДля установки модуля 1С-Битрикс (тип пакета ```bitrix-d7-module```) необходимо указать путь до папки с 1С-Битрикс в \nвашем `composer.json` файле проекта, после чего выполнить установку пакета через ```composer require```, \nпредварительно выполнив ```composer require fi1a/installers```.\n\n```json\n{\n \"extra\": {\n  \"bitrix-dir\": \"../bitrix\"\n }\n}\n```\n\n```shell\ncomposer require fi1a/installers\ncomposer require foo/bar\n```\n\nПосле копирования файлов модуля, выставляется флаг в параметрах модулей битрикс, который означает установку модуля через composer.\nПолучить значение можно таким образом:\n\n```php\n\\Bitrix\\Main\\Config\\Option::get('fi1a.installers', 'YOUR_MODULE.ID') === 'Y';\n```\n\nгде `YOUR_MODULE.ID`, идентификатор устанавливаемого модуля.\n\n## Поддержка установки и удаления пакета\n\nКласс библиотеки используется для определения возможности установки или удаления пакета (методы ```canInstall``` и ```canUninstall```).\nТакже содержит методы вызываемые при установке, удалении или обновлении пакета (методы ```install```, ```uninstall``` и ```update```). \n\nКласс библиотеки должен располагаться по пути `installers/Library.php`, иметь название\n```Fi1a\\Installers\\{{Vendor}}{{Name}}\\Library``` и реализовывать интерфейс ```Fi1a\\Installers\\LibraryInterface```.\n\n| Метод                   | Описание                                |\n|-------------------------|-----------------------------------------|\n| ```canInstall```        | Можно установить пакет или нет          |\n| ```canUninstall```      | Можно удалить пакет или нет             |\n| ```install```           | Устанавливает пакет                     |\n| ```uninstall```         | Удаляет пакет                           |\n| ```update```            | Обновляет пакет                         |\n| ```getCurrentVersion``` | Возвращает текущую версию пакета        |\n| ```getUpdateVersion```  | Возвращает версию для обновления пакета |\n\nПример класса библиотеки для типа пакета ```bitrix-d7-module```:\n\n```php\n\u003c?php\n\ndeclare(strict_types=1);\n\nnamespace Fi1a\\Installers\\Fi1aBitrixd7moduleinstallerdemo;\n\nuse Bitrix\\Main\\Config\\Option;\nuse CModule;\nuse ErrorException;\nuse Fi1a\\Console\\IO\\InputInterface;\nuse Fi1a\\Console\\IO\\OutputInterface;\nuse Fi1a\\Installers\\AbstractLibrary;\nuse Fi1a\\Installers\\Version;\nuse Fi1a\\Installers\\VersionInterface;\n\n/**\n * Библиотека\n */\nclass Library extends AbstractLibrary\n{\n    public const MODULE_ID = 'fi1a.bitrixd7moduleinstallerdemo';\n\n    /**\n     * @inheritDoc\n     */\n    public function __construct(OutputInterface $output, InputInterface $stream)\n    {\n        parent::__construct($output, $stream);\n        $this-\u003eincludeBitrix();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function canInstall(): bool\n    {\n        return true;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function canUninstall(): bool\n    {\n        return true;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function install(): bool\n    {\n        $this-\u003eoutput-\u003ewriteln('\u003cnotice\u003eLibrary-\u003einstall\u003c/notice\u003e');\n\n        return true;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function uninstall(): bool\n    {\n        $this-\u003eoutput-\u003ewriteln('\u003cnotice\u003eLibrary-\u003euninstall\u003c/notice\u003e');\n\n        return true;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function update(): bool\n    {\n        $this-\u003eoutput-\u003ewriteln('\u003cnotice\u003eLibrary-\u003eupdate\u003c/notice\u003e');\n\n        /**\n         * @var \\fi1a_bitrixd7moduleinstallerdemo|false $module\n         * @psalm-suppress UnusedVariable\n         */\n        $module = CModule::CreateModuleObject(self::MODULE_ID);\n        if ($module) {\n            // @codingStandardsIgnoreStart\n            Option::set(self::MODULE_ID, 'version', (string) $module-\u003eMODULE_VERSION);\n            // @codingStandardsIgnoreEnd\n        }\n\n        return true;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getCurrentVersion(): VersionInterface\n    {\n        [$major, $minor, $build] = explode(\n            '.',\n            (string) Option::get(self::MODULE_ID, 'version', '1.0.0')\n        );\n\n        return new Version((int) $major, (int) $minor, (int) $build);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getUpdateVersion(): VersionInterface\n    {\n        /**\n         * @var \\fi1a_bitrixd7moduleinstallerdemo|false $module\n         */\n        $module = CModule::CreateModuleObject(self::MODULE_ID);\n        if (!$module) {\n            throw new ErrorException(sprintf('Модуль \"%s\" не найден', self::MODULE_ID));\n        }\n        // @codingStandardsIgnoreStart\n        [$major, $minor, $build] = explode(\n            '.',\n            (string) $module-\u003eMODULE_VERSION\n        );\n        // @codingStandardsIgnoreEnd\n\n        return new Version((int) $major, (int) $minor, (int) $build);\n    }\n\n    /**\n     * Подключить битрикс\n     */\n    private function includeBitrix(): void\n    {\n        $_SERVER['DOCUMENT_ROOT'] = realpath(__DIR__ . '/../../../..');\n\n        defined('NO_KEEP_STATISTIC') || define('NO_KEEP_STATISTIC', true);\n        defined('NOT_CHECK_PERMISSIONS') || define('NOT_CHECK_PERMISSIONS', true);\n        defined('BX_WITH_ON_AFTER_EPILOG') || define('BX_WITH_ON_AFTER_EPILOG', true);\n        defined('BX_NO_ACCELERATOR_RESET') || define('BX_NO_ACCELERATOR_RESET', true);\n\n        /**\n         * @psalm-suppress UnresolvableInclude\n         */\n        require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';\n    }\n}\n\n```\n\n## Поддержка обновления пакета\n\nПри обновлении пакета осуществляется поиск файлов версий обновлений и последовательный запуск их.\n\nФайлы с версиями для обновления расположены по пути `installers/versions` (0.1.0, 1.2.0, ...) вашего пакета.\n\nКласс должен иметь имя ```Fi1a\\Installers\\{{Vendor}}{{Name}}\\Versions\\Version{{Major}}_{{Minor}}_{{Build}}\\UpdateVersion```,\nреализовывать интерфейс ```Fi1a\\Installers\\UpdateVersionInterface``` и располагаться по пути `installers/versions/{{Major}}.{{Minor}}.{{Build}}/UpdateVersion.php`\n\nПример:\n\n```php\n\u003c?php\n\ndeclare(strict_types=1);\n\nnamespace Fi1a\\Installers\\Fi1aBitrixd7moduleinstallerdemo\\Versions\\Version1_1_0;\n\nuse Fi1a\\Installers\\AbstractUpdateVersion;\n\n/**\n * Обновление версии 1.1.0\n */\nclass UpdateVersion extends AbstractUpdateVersion\n{\n    /**\n     * @inheritDoc\n     */\n    public function update(): bool\n    {\n        require __DIR__ . '/updater.php';\n        $this-\u003eoutput-\u003ewriteln('UpdateVersion-\u003eupdate 1.1.0');\n\n        return true;\n    }\n}\n\n```\n\nПример расположен по пути `installers/versions/1.1.0/UpdateVersion.php`\n\n[badge-release]: https://img.shields.io/packagist/v/fi1a/installers?label=release\n[badge-license]: https://img.shields.io/github/license/fi1a/installers?style=flat-square\n[badge-php]: https://img.shields.io/packagist/php-v/fi1a/installers?style=flat-square\n[badge-coverage]: https://img.shields.io/badge/coverage-100%25-green\n[badge-downloads]: https://img.shields.io/packagist/dt/fi1a/installers.svg?style=flat-square\u0026colorB=mediumvioletred\n[badge-mail]: https://img.shields.io/badge/mail-support%40fi1a.ru-brightgreen\n\n[packagist]: https://packagist.org/packages/fi1a/installers\n[license]: https://github.com/fi1a/installers/blob/master/LICENSE\n[php]: https://php.net\n[downloads]: https://packagist.org/packages/fi1a/installers\n[mail]: mailto:support@fi1a.ru","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffi1a%2Finstallers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffi1a%2Finstallers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffi1a%2Finstallers/lists"}