web-dev-qa-db-ja.com

Composerでディレクトリを無視する方法は?

PHPライブラリをリリースし、 Packagist に送信して、 Composer 経由でインストールできるようにしたいと思います。

私のライブラリの構造は次のとおりです。

lib/
tests/
composer.json
README.md

基本的に、このライブラリをプロジェクトのcomposer.jsonに含めるときはいつでも、testsディレクトリを除いてすべてをコピーしたいと思います。これは面倒で、ライブラリ自体を開発するときにのみ必要です。それ以外の場合は、スペースの無駄になります(特に、プロジェクトを本番用にパッケージ化する場合)。

このディレクトリをライブラリのcomposer.jsonから除外することは可能ですか?

28
Benjamin

これはComposerでは不可能です。ただし、それを行うにはいくつかの方法があります。

  • --prefer-distを指定してupdateまたはinstallコマンドを実行すると、Composerはgithubにアーカイブをダウンロードしようとします。これをのルートディレクトリの.gitattributesファイルに配置することで、アーカイブからテストディレクトリを削除できます。あなたのプロジェクト:

    Tests/ export-ignore
    
  • Composerはgithubのタグのみを使用します。タグを作成するときにtestsディレクトリを一時的に削除するだけでもうまくいきます。

30
Wouter J

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が提供するのとほぼ同じコントロールを使用できます。

9
Sven

これは、2015年11月11日以降、 https://getcomposer.org/doc/04-schema.md#exclude-files-from-classmaps で可能になっています。

ソース: https://github.com/composer/composer/issues/4456#issuecomment-155825777

編集:誤解。上記は、オートローダーが指定されたパスを無視することを許可するだけであり、インストール時にそれらがファイルシステムにコピーされることを実際に妨げるものではありません。

1
Motin