Каталог vendor/bin в Composer. Работа с бинарными скриптами поставщика.
Исполняемые команды вендора в Composer и каталог vendor/bin

Исполняемые скрипты поставщика в Composer и папка vendor/bin

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



Что такое бинарный файл вендора в Composer?

Любой сценарий командной строки, который пакет Composer хотел бы передать пользователю, устанавливающему пакет, должен быть указан как бинарный файл поставщика.

Если пакет содержит другие скрипты, которые не нужны пользователям пакета (например, скрипты сборки или компиляции), этот код не должен быть указан в качестве бинарного файла поставщика.

Как определяется бинарный файл вендора в Composer?

Исполняемый файл поставщика определяется с помощью добавления ключа bin в composer.json проекта. Он задается в виде массива файлов, поэтому для любого проекта можно добавить несколько двоичных файлов.

{
    "bin": ["bin/my-script", "bin/my-other-script"]
}

Что дает определение бинарных файлов поставщика в composer.json?

composer.json указывает Composer установить двоичные файлы пакета в vendor/bin для любого проекта, который зависит от этого проекта.

Это удобный способ опубликовать полезные скрипты, которые в противном случае были бы спрятаны глубоко в каталоге vendor/.

Что происходит, когда в Composer запускается сайт composer.json, в котором определены бинарные файлы поставщика?

Для бинарных файлов, которые определяются пакетом напрямую, ничего не происходит.

Что произойдет, если запустить Composer с composer.json, в котором перечислены зависимости с бинарными файлами поставщиков?

Composer ищет бинарные файлы, определенные во всех зависимостях. Создается прокси-файл (или два в Windows/WSL) из двоичных файлов каждой зависимости в vendor/bin.

Скажем, пакет my-vendor/project-a имеет двоичные файлы, настроенные следующим образом:

{
    "name": "my-vendor/project-a",
    "bin": ["bin/project-a-bin"]
}

Запуск composer install для этого composer.json ничего не сделает с bin/project-a-bin.

Допустим, проект my-vendor/project-b имеет такие требования:

{
    "name": "my-vendor/project-b",
    "require": {
        "my-vendor/project-a": "*"
    }
}

Запуск composer install для этого composer.json просмотрит все двоичные файлы project-a и установит их в vendor/bin.

В этом случае Composer сделает vendor/my-vendor/project-a/bin/project-a-bin доступным как vendor/bin/project-a-bin.

Поиск автозагрузчика Composer из бинарного файла

Начиная с версии Composer 2.2, новая глобальная переменная $_composer_autoload_path определяется прокси-файлом bin, чтобы при выполнении вашего бинарного файла она могла использовать его для легкого нахождения автозагрузчика проекта.

Однако эта глобальная переменная будет недоступна при запуске бинарных файлов, определенных самим корневым пакетом, поэтому вам необходимо иметь запасной вариант.

Это может выглядеть, например, так:

<?php

include $_composer_autoload_path ?? __DIR__ . '/../vendor/autoload.php';

Если вы хотите полагаться на это в своем пакете, вам следует, однако, убедиться, что вам также требуется "composer-runtime-api": "^2.2", чтобы гарантировать, что пакет будет установлен с версией Composer, поддерживающей эту функцию.

Поиск bin-dir Composer из бинарного файла

Начиная с Composer 2.2.2, новая глобальная переменная $_composer_bin_dir определяется прокси-файлом bin, чтобы при выполнении вашего бинарного файла она могла использовать его, чтобы легко найти каталог bin Composer проекта.

Для не-PHP бинарных файлов, начиная с Composer 2.2.6, bin proxy устанавливает переменную окружения COMPOSER_RUNTIME_BIN_DIR.

Однако эта глобальная переменная не будет доступна при запуске бинарных файлов, определенных самим корневым пакетом, поэтому вам необходимо иметь запасной вариант.

Это может выглядеть, например, так:

<?php

$binDir = $_composer_bin_dir ?? __DIR__ . '/../vendor/bin';
#!/bin/bash

if [[ -z "$COMPOSER_RUNTIME_BIN_DIR" ]]; then
  BIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
else
  BIN_DIR="$COMPOSER_RUNTIME_BIN_DIR"
fi

Если вы хотите полагаться на это в своем пакете, вам следует, однако, убедиться, что вам также требуется "composer-runtime-api": "^2.2.2", чтобы гарантировать, что пакет будет установлен с версией Composer, поддерживающей эту функцию.

А как насчет Windows и .bat-файлов?

Пакеты, полностью управляемые Composer, не должны содержать никаких файлов .bat для совместимости с Windows. Composer особым образом обрабатывает установку бинарных файлов при запуске в среде Windows:

  • Автоматически генерируется файл .bat для ссылки на бинарный файл.
  • Также генерируется прокси-файл в стиле Unix с тем же именем, что и бинарный файл, что полезно для WSL, виртуальных машин Linux и т. д.

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

Можно ли установить бинарные файлы поставщика куда-то еще, кроме vendor/bin?

Да, есть два способа указать альтернативное местоположение бинарных файлов поставщика:

  1. Установка параметра конфигурации bin-dir в файле composer.json.
  2. Установка переменной окружения COMPOSER_BIN_DIR.

Пример первого варианта выглядит следующим образом:

Запуск composer install для этого composer.json приведет к тому, что все бинарные файлы поставщика будут установлены в scripts/ вместо vendor/bin/.

{
    "config": {
        "bin-dir": "scripts"
    }
}

Вы можете установить bin-dir в ./, чтобы поместить двоичные файлы в корень проекта.

Перевод с английского официальной документации Composer:
https://getcomposer.org/doc/articles/vendor-binaries.md

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню