Как убрать все тесты в php композитора?

Я новичок в разработке композиторов. Я только начинаю работать с композитором в моем текущем проекте. И я думаю, что мой вопрос уже задавался прежде, или я noob о композиторе:D

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

Есть ли команда для удаления этих тестов ИЛИ мне нужно удалить ее вручную ИЛИ что?:'(

3 ответа

Есть ли команда для удаления этих тестов ИЛИ мне нужно удалить ее вручную ИЛИ что?:'(

Это интересный вопрос.

На данный момент вы как потребитель пакета не можете автоматически игнорировать тесты. Нет команды Composer для очистки всех папок после загрузки поставщиков. Чтобы решить эту проблему, очистите каталог поставщика в процессе сборки приложения. Это запуск удаления во время начальной загрузки выбранного набора файлов, а затем выгрузка. Это этап настройки, сравнимый с прогревом кэша или первоначальной настройкой базы данных для производства. Скучная работа:(

Тема удаления тестовой папки (и других средств разработки) из папки поставщика была запрошена и обсуждена ранее, см., Например, проблемы Composer #1750 и # 4438.

Многим пользователям нужна эта функция, но, к сожалению, Composer пока ее не предоставляет. Я полагаю, что сопровождающие Composer объединят папки исключения (функция уменьшения), если кто-то потратит время на решение проблемы. Это тяжелая работа, чтобы установить стандарт. Также возможно создать плагин Composer для предоставления этой функции.


Как может выглядеть такая функция?

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

    • Сначала можно было бы создать черный список, перебирая все файлы composer.json, создавая список файлов и папок для удаления.
    • Затем можно использовать белый список из основного проекта, чтобы вычеркнуть материал из черного списка (= материал белого списка). Это должно переопределить исключение решений, принятых в извлеченных пакетах.
    • Наконец, используйте черный список для прогона удаления в папке vendor.
    • Это означает, что проект, тянущий пакеты поставщика, имеет полный контроль. Такой подход обеспечивает большую гибкость: если провайдер пакетов вносит черный список в тестовую папку, но разработчик, потребляющий пакеты, хочет сохранить его, он может внести в белый список папку этого пакета. Но он тоже ничего не может поделать и переходить с нормальных черных списков.

    Может быть, можно также уважать export-ignore Настройки в .gitattributes файл пакета, при получении Source, а не Dist.

  2. Другой способ - сосредоточиться на описании автозагрузки.

    Композитор обеспечивает require-dev а также autoload-dev рядом с require а также autoload, Это означает, что у нас есть четкое разделение между классами разработки и производства. Подумайте о зависимости phpunit и папке ваших тестов, определенной в require-dev и тестовое пространство имен, определенное в autoload-dev,

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

    Дэвид Грудл (@dg) использовал этот подход в своем Composer Cleaner.

    Это экспериментально. Сделайте резервную копию.

Что касается использования .gitattributes файл с export-ignore директива

Да, это один из способов уменьшить размер git-архивов, но он никогда не принимался сообществом PHP как стандарт или лучшая практика.

Сопровождающие Composer продвигают его использование (см. Комментарии алкоголя и naderman), в то время как, например, Symfony прекратил его использование.

На данный момент нет четкого руководства для лучшей практики по этому вопросу. Итак, я не уверен, что это лучшая практика, и мы должны действительно продвигать или предлагать это.

Его для "Dists", взято с composer --prefer-dist,

И даже если некоторые разработчики примут эту практику, о многих способах получения "Source" с помощью Composer не позаботятся: hg, svn, git source.

Не напрямую, но если сопровождающие пакета следовали некоторым рекомендациям, это возможно.

Использовать --prefer-dist аргумент в пользу composer install а также composer update, тогда композитор попытается загрузить дистрибутив пакетов вместо его источника. Для пакетов на GitHub это означает, что он загружает zip-файл, а не клонирует репозиторий.

Возможно, что это все еще включает в себя все тесты, но рекомендуется не включать тесты в дистрибутив. Для пакетов на GitHub тесты исключаются, если есть .gitattributes файл с содержанием вроде:

/tests              export-ignore
/phpunit.xml        export-ignore

Подробнее: мне не нужны ваши тесты в моем производстве (Reddit)

Для этого есть плагин: очистка композитора. Автор предупреждает, что пакет является экспериментальным, поэтому будьте осторожны.

Другие вопросы по тегам