php - 如何在基于作曲家的应用程序中安装手动下载的基于作曲家的插件?
问题描述
对于教育建议,我编写了自己的 PHP 应用程序并添加了一个小插件系统。应用程序本身使用 composer 来管理所需的依赖项。
一个插件可能有他自己的依赖项(Guzzle 等)并且两个插件有一些重叠的依赖项。为了减少存储空间并避免任何干扰,我将使用 composer 和 composer 安装程序来安装插件:
/src
/plugins
/DemoPlugin
composer.json
/src
/config
...
/vendor
composer.phar
composer.json
...
因此,可以在“主”应用程序上轻松安装插件,composer 会自动处理所有依赖项(包括自动加载)。
但是这个工作流产生了一个我目前无法解决的问题:它要求用户使用composer require app/plugin-name
并从网络下载插件。但我不能保证每个插件都可以这样安装。例如:付费插件、公司内部插件或仅以“zip 文件”形式存在的简单开发插件。
使用作曲家安装程序,插件存储在不同的目录中,而不是“经典”供应商目录。但据我了解,无法将基于 zip 的插件复制到此插件文件夹中。我找不到任何开始安装插件的方法(下载供应商,可能是安装脚本等)。
这结束了我的问题:可以从“主应用程序”告诉作曲家实例应该安装插件(下载供应商,可能是安装脚本等)但不要开始下载,因为插件已经正确放置?
如果我composer install
在插件目录中运行,composer 会将供应商直接下载到插件目录中 - 存在所有问题(重复依赖项,未集成到自动加载等)。
我很感激任何帮助!
解决方案
您正在寻找的是一个路径存储库。
要遵循您的示例,您可以使用以下内容composer.json
{
"name": "test/test",
"type": "test",
"repositories": [{
"type": "path",
"url": "./plugins/**/"
}],
"require": {
"guzzlehttp/guzzle": "^6.3"
}
}
您具有以下结构的地方:
├── composer.json
├── composer.lock
└── plugins
└── DemoPlugin
└── composer.json
您最终可以像往常一样需要您的插件:
composer require "test/demo:@dev"
你会看到依赖没有重复(你不需要安装 DemoPlugin 包)。
推荐阅读
- python - 对于多输入模型,什么是 tf.data.Dataset.from_tensor_slices 的替代方法?
- go - 如何每次从列表中选择一个随机数
- css - Zurb Foundation 在 iOS 上显示模式
- amazon-web-services - 无需角色承担的 AWS DynamoDB 跨账户访问
- networking - 尝试与 samba 客户端连接时的 NT_STATUS_IO_TIMEOUT
- java - 如何导入和导出树视图内容
- r - 使用 R 覆盖重叠段
- c - 返回值被忽略 [scanf]
- python - 获取字符串中总和的答案
- c - c编程中标准math.h库的pow和powf之间的不同执行时间