Подтвердить что ты не робот

Как игнорировать каталоги с помощью Composer?

Я хочу опубликовать библиотеку PHP и отправить ее на Packagist, чтобы установить ее через Composer.

Моя библиотека имеет следующую структуру:

lib/
tests/
composer.json
README.md

В принципе, всякий раз, когда я включаю эту библиотеку в проект composer.json, мне бы хотелось, чтобы все было скопировано за исключением каталога tests, что является громоздким и необходимо только при разработке самой библиотеки. Это просто пустая трата пространства (особенно при упаковке проекта для производства).

Можно ли исключить этот каталог из библиотеки composer.json?

4b9b3361

Ответ 1

В Composer это невозможно. Однако есть несколько способов сделать это:

  • Когда вы запускаете команду обновления или установки с помощью --prefer-dist, Composer пытается загрузить архив в github. Вы можете удалить тестовый каталог из архивов, поместив его в файл .gitattributes в корневой каталог вашего проекта:

    Tests/ export-ignore
    
  • Композитор будет использовать теги только для github. Просто временное удаление каталога тестов при создании тега также будет делать трюк.

Ответ 2

Можно управлять созданием архива, добавляя шаблоны исключений в файл composer.json внутри клавиши archive. Подробности смотрите в https://getcomposer.org/doc/04-schema.md#archive.

Приведенный пример (цитируется по приведенному выше URL):

{
    "archive": {
        "exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"]
    }
}

The example will include /dir/foo/bar/file, /foo/bar/baz, /file.php, /foo/my.test but it will exclude /foo/bar/any, /foo/baz, и /my.test.

Таким образом, у вас будет примерно тот же элемент управления, который .gitattributes даст вам, без необходимости использовать Git или влиять на какие-либо процессы, которые требуют других настроек в указанном файле.

Ответ 3

Это было возможно с 11 ноября 2015 года с https://getcomposer.org/doc/04-schema.md#exclude-files-from-classmaps

Источник: https://github.com/composer/composer/issues/4456#issuecomment-155825777

РЕДАКТИРОВАНИЕ: Неправильная интерпретация. Вышеупомянутое позволяет автозагрузчику игнорировать указанные пути, на самом деле это не предотвращает их копирование в файловую систему при установке.

Ответ 4

Это можно автоматизировать с помощью post-update-cmd файла composer.json внутри клавиши scripts:

"scripts": {
    "post-update-cmd": [
        "rm -rf vendor/aura/intl/tests vendor/cakephp/cakephp/tests"
    ],
},