不要将它放入 vendor(因为它预计会及时删除和 vendor-dir is a configuration detail 的名称),所以从技术上讲,您已经将它放在了错误的位置。但是,这很容易恢复,只需使用不同的路径即可内项目根目录,例如创建一个将包放入的目录(以下为pkg)。
然后将该路径添加到项目自动加载配置中(参见autoload (Composer configuration schema) - Autoload mapping for a PHP autoloader.:
{
"autoload": {
"psr-4": {
"RandomAgency\Import\": "pkg/random-agency-import-4.2"
}
}
}
最好为包使用一个文件夹 - 而不是 vendor/package - 并在包版本的前面加上一个标识符。
更好的想法是,如果该包仍然包含 composer.json 配置文件,请将其添加为 path repository 并要求它具有与 ./pkg/random-agency-import-3.12/composer.json#/version 或 */@dev 匹配的版本约束,如果“版本”成员是失踪:
{
"require": {
"random-agency/import": "*"
},
"repositories": [
{
"type": "path",
"url": "./pkg/random-agency-import-4.2"
}
]
}
然后,您无需手动配置自动加载器,因为它取自库 composer.json 配置。这同样适用于任何其他配置部分,包括。它的依赖关系。
的巨大好处小路存储库是,即接受相对的项目配置文件 (composer.json) 的路径。
对比一下你之前的理解:
解决它的最佳方法是创建一个新的 composer 包并用我自己的替换 composer.json 中的代理 URL,但我现在需要一个快速而肮脏的方法。
你要么现在已经解决了(你需要的包有一个composer.json文件)要么你仍然需要添加包信息,但你不需要创建一个新的打包或交换 URL。
那是因为您也可以在 Composer 中使用包存储库现在有了path如果您仔细查看/repositories/0/package,您会发现这是另一个composer.json 文档,就在该位置内联(并且/dist 成员是新成员):
{
"repositories": [
{
"type": "package",
"package": {
"name": "random-agency/import",
"version": "4.2.0",
"dist": {
"type": "path",
"url": "./pkg/random-agency-import-4.2"
},
"autoload": {
"psr-4": {
"RandomAgency\Import\": ""
}
}
}
}
],
"require": {
"my/package": "4.2"
}
}
当您进行更新等操作时,Composer 会将包文件安装到供应商文件夹中(无论它可能在哪里,无论您多久删除一次)。
如果 - 且仅当 - 没有 ./pkg/random-agency-import-3.12/composer.json 文件,您将需要创建一个“包”,因为那是最后的 composer.json。与您将自动加载部分添加到 composer.json 类似,您也可以将该目录添加到包中(创建您自己的 ./pkg/random-agency-import-3.12/composer.json 文件)或将该包信息作为包添加到存储库条目下的项目自己的配置文件中。