Игнорировать папку тестов при отправке в packagist
У меня есть проект со следующей структурой:
- src
----/ /* Relevant files */
- tests
----/ /* Irrelevant files */
- composer.json
- phpunit.xml
Проект отправляется в Packagist при каждом коммите. Но это отправка тестовых файлов.
Я хотел бы игнорировать tests
папка, так что композитор не будет загружать ненужные файлы, когда кто-то звонит composer require my/package
Вот как выглядит содержимое моего composer.json:
{
"name": "my/package",
"description": "...",
"type": "library",
"license": "MIT",
"require": {
"php": ">=7"
},
"require-dev": {
"phpunit/phpunit": ">=5.4"
},
"autoload": {
"psr-4": {
"MyProject\\": "./src"
}
}
}
2 ответа
Игнорировать папку тестов при отправке в packagist
Давайте сначала проясним некоторую путаницу.
Когда вы включаете Packagist для своего хранилища, Packagist загрузит composer.json
чтобы получить метаданные о вашем проекте и получить информацию о версии из тегов / ветвей.
Но вы не отправляете свой код PHP или какие-либо тесты в Packagist.
Я хотел бы игнорировать папку "тесты", так что composer не будет загружать ненужные файлы, когда кто-то вызывает composer и требует мой /package
Этот вопрос всплывает довольно часто. Я ссылаюсь на подробный ответ, который я написал некоторое время назад, который объясняет много общего: /questions/9307731/kak-ubrat-vse-testyi-v-php-kompozitora/9307737#9307737
Использование .gitattributes
файл с export-ignore
директива
- Технически, вы можете добавить
.gitattributes
файл в ваш репозиторий, который объявляетexport-ignore
Правило для тестовой папки. - Это означает, что любой
git export
больше не будет иметь папки с тестами, включая zip-файл Github.
Хорошо, исключено сделано..
Но когда кто-то composer require
Это ваш проект, теперь он будет зависеть от параметра --prefer-dist для установки пакета из dist (zip). (Вы получите тесты с --prefer-source
).
Если это небольшая библиотека, перестаньте беспокоиться. Будь счастлив..:)
Если это приложение большего размера, то лучшим решением будет правильно упаковать приложение, а не полагаться на
git exported
почтовый дистрибутив. Большинство разработчиков не используютbuild.xml
или любой другой сценарий сборки, но это правильный способ сделать это, по моему мнению.Это означает, что как только вы будете готовы отметить новый выпуск. Вы запускаете свой скрипт сборки, который выбирает все зависимости, запускает тесты еще раз и, когда все в порядке, отбрасывает все тесты и упаковывает файлы для развертывания.
Небольшая подсказка: не забудьте добавить autoload-dev
раздел для ваших тестов composer.json
,
Если ваш пакет Packagist связан с репозиторием GitHub, просто создайте «Выпуск» в GitHub, который не содержит файлов разработки.
Это готово для ваших конечных пользователей, поскольку установка/обновление Composer использует--prefer-dist
по умолчанию , который обслуживает пакет zip, который находится в «Release».
Самый простой способ сделать это (например, так делают некоторые пакеты Symfony) — создать.gitattributes
(как предложил Йенс) со следующим содержанием:
/tests export-ignore
Теперь, когда вы создаете тег/выпуск в GitHub, ZIP-файл выпуска не будет содержать папку.
Единственный сценарий, гдеtests
папка будет включена в этом случае, если пользователь установил ваш пакет с--prefer-source
, но если они это делают, они должны знать, что делают.