Игнорировать папку тестов при отправке в 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, но если они это делают, они должны знать, что делают.

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