Как удалить все тесты в php-программиста?

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

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

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

Ответ 1

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

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

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

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

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


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

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

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

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

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

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

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

    Дэвид Грюд (@dg) использовал этот подход в своей Очиститель композиторов.

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

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

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

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

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

Его для "Dists", извлеченного с помощью composer --prefer-dist.

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

Ответ 2

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

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

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

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

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

Ответ 3

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