我想发布一个PHP库并在Packagist上提交,以便通过Composer安装它。
我的图书馆有以下结构:
lib/
tests/
composer.json
README.md
基本上,每当我在项目的composer.json
中包含这个库时,我都想要复制除tests
目录之外的所有内容,这很麻烦,只有在开发库时才需要本身。否则这只是浪费空间(特别是在将项目包装到生产中时)。
是否可以从库的composer.json
?
答案 0 :(得分:28)
这在Composer中是不可能的。但是,有一些方法可以做到这一点:
当您使用--prefer-dist
运行更新或安装命令时,Composer会尝试在github上下载存档。您可以将该文件放在项目根目录中的.gitattributes
文件中,从文件中删除测试目录:
Tests/ export-ignore
Composer只会使用github上的标签。只是在创建标记时临时删除测试目录也可以解决问题。
答案 1 :(得分:8)
可以通过在composer.json
密钥中的archive
文件中添加排除模式来控制存档创建。有关详细信息,请参阅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
和{{1 }}
通过这种方式,您可以获得与/my.test
相同的控件,而无需使用Git或影响在所述文件中需要不同设置的任何进程。
答案 2 :(得分:1)
自2015年11月11日起,https://getcomposer.org/doc/04-schema.md#exclude-files-from-classmaps
已成为可能来源:https://github.com/composer/composer/issues/4456#issuecomment-155825777
编辑:误解。以上只允许自动加载器忽略指定的路径,它实际上并不会阻止它们在安装时被复制到文件系统。答案 3 :(得分:0)
可以使用post-update-cmd
键中的composer.json
scripts
文件来自动执行此操作:
"scripts": {
"post-update-cmd": [
"rm -rf vendor/aura/intl/tests vendor/cakephp/cakephp/tests"
],
},