PHPライブラリをリリースし、 Packagist に送信して、 Composer 経由でインストールできるようにしたいと思います。
私のライブラリの構造は次のとおりです。
lib/
tests/
composer.json
README.md
基本的に、このライブラリをプロジェクトのcomposer.json
に含めるときはいつでも、tests
ディレクトリを除いてすべてをコピーしたいと思います。これは面倒で、ライブラリ自体を開発するときにのみ必要です。それ以外の場合は、スペースの無駄になります(特に、プロジェクトを本番用にパッケージ化する場合)。
このディレクトリをライブラリのcomposer.json
から除外することは可能ですか?
これはComposerでは不可能です。ただし、それを行うにはいくつかの方法があります。
--prefer-dist
を指定してupdateまたはinstallコマンドを実行すると、Composerはgithubにアーカイブをダウンロードしようとします。これをのルートディレクトリの.gitattributes
ファイルに配置することで、アーカイブからテストディレクトリを削除できます。あなたのプロジェクト:
Tests/ export-ignore
Composerはgithubのタグのみを使用します。タグを作成するときにtestsディレクトリを一時的に削除するだけでもうまくいきます。
archive
キー内のcomposer.json
ファイルに除外パターンを追加することにより、アーカイブの作成を制御することができます。詳細については、 https://getcomposer.org/doc/04-schema.md#archive を参照してください。
与えられた例(上記のURLから引用):
{
"archive": {
"exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"]
}
}
この例には、
/dir/foo/bar/file
、/foo/bar/baz
、/file.php
、/foo/my.test
が含まれますが、/foo/bar/any
、/foo/baz
、および/my.test
は除外されます。
そうすれば、Gitを使用したり、ファイルで異なる設定を必要とするプロセスに影響を与えたりすることなく、.gitattributes
が提供するのとほぼ同じコントロールを使用できます。
これは、2015年11月11日以降、 https://getcomposer.org/doc/04-schema.md#exclude-files-from-classmaps で可能になっています。
ソース: https://github.com/composer/composer/issues/4456#issuecomment-155825777
編集:誤解。上記は、オートローダーが指定されたパスを無視することを許可するだけであり、インストール時にそれらがファイルシステムにコピーされることを実際に妨げるものではありません。