如何在基于作曲家的应用程序中安装手动下载的基于作曲家的插件?
How to install a manual downloaded composer-based plugin in a composer-based application?
出于教育目的,我编写了自己的 PHP 应用程序并添加了一个小插件系统。应用程序本身使用 composer 来管理所需的依赖项。
一个插件可能有自己的依赖项(Guzzle 等)并且两个插件有一些重叠的依赖项。为了减少存储空间并避免任何干扰,我将使用 composer 和用于插件的 composer 安装程序:
/src
/plugins
/DemoPlugin
composer.json
/src
/config
...
/vendor
composer.phar
composer.json
...
因此可以在 "main" 应用程序上轻松安装插件,并且 composer 会自动处理所有依赖项(包括自动加载)。
但是这个工作流程产生了一个我目前无法解决的问题:它需要用户使用 composer require app/plugin-name
并从网络下载插件。但是我不能保证每个插件都能这样安装。例如:付费插件、公司内部插件或仅以 "zip file".
形式存在的简单开发插件
对于 composer 安装程序,插件存储在不同的目录中,而不是 "classic" 供应商目录。但据我所知,不可能将基于 zip 的插件复制到该插件文件夹中。我找不到任何方法来开始安装插件(下载供应商,也许安装脚本等)。
这就是我的问题:可以从 "main application" 告诉作曲家实例应该安装一个插件(下载供应商,可能安装脚本等)但不要开始下载,因为插件已经正确放置了吗?
如果我 运行 composer install
在插件目录中,composer 将直接将供应商下载到插件目录中 - 存在所有问题(重复依赖项,没有集成到自动加载等)。
感谢任何帮助!
您要找的是path repository。
要按照您的示例,您可以使用以下 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 包)。
出于教育目的,我编写了自己的 PHP 应用程序并添加了一个小插件系统。应用程序本身使用 composer 来管理所需的依赖项。
一个插件可能有自己的依赖项(Guzzle 等)并且两个插件有一些重叠的依赖项。为了减少存储空间并避免任何干扰,我将使用 composer 和用于插件的 composer 安装程序:
/src
/plugins
/DemoPlugin
composer.json
/src
/config
...
/vendor
composer.phar
composer.json
...
因此可以在 "main" 应用程序上轻松安装插件,并且 composer 会自动处理所有依赖项(包括自动加载)。
但是这个工作流程产生了一个我目前无法解决的问题:它需要用户使用 composer require app/plugin-name
并从网络下载插件。但是我不能保证每个插件都能这样安装。例如:付费插件、公司内部插件或仅以 "zip file".
对于 composer 安装程序,插件存储在不同的目录中,而不是 "classic" 供应商目录。但据我所知,不可能将基于 zip 的插件复制到该插件文件夹中。我找不到任何方法来开始安装插件(下载供应商,也许安装脚本等)。
这就是我的问题:可以从 "main application" 告诉作曲家实例应该安装一个插件(下载供应商,可能安装脚本等)但不要开始下载,因为插件已经正确放置了吗?
如果我 运行 composer install
在插件目录中,composer 将直接将供应商下载到插件目录中 - 存在所有问题(重复依赖项,没有集成到自动加载等)。
感谢任何帮助!
您要找的是path repository。
要按照您的示例,您可以使用以下 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 包)。