【问题标题】:How to install a manual downloaded composer-based plugin in a composer-based application?如何在基于作曲家的应用程序中安装手动下载的基于作曲家的插件?
【发布时间】:2019-12-11 02:16:23
【问题描述】:

为了教育建议,我编写了自己的 PHP 应用程序并添加了一个小插件系统。应用程序本身使用 composer 来管理所需的依赖项。

一个插件可能有他自己的依赖项(Guzzle 等)并且两个插件有一些重叠的依赖项。为了减少存储空间并避免任何干扰,我将使用 composer 和 composer 安装插件:

/src
/plugins
  /DemoPlugin
    composer.json
    /src
    /config
    ...
/vendor
composer.phar
composer.json
...

因此可以在“主”应用程序上轻松安装插件,并且 composer 会自动处理所有依赖项(包括自动加载)。

但是这个工作流程产生了一个我目前无法解决的问题:它要求用户使用composer require app/plugin-name 并从网络下载插件。但是我不能保证每个插件都可以这样安装。例如:付费插件、公司内部插件或仅以“zip 文件”形式存在的简单开发插件。

对于 composer 安装程序,插件存储在不同的目录中,而不是“经典”供应商目录。但据我了解,无法将基于 zip 的插件复制到此插件文件夹中。我找不到任何开始安装插件的方法(下载供应商,可能是安装脚本等)。

这结束了我的问题:可以从“主应用程序”告诉作曲家实例应该安装插件(下载供应商,也许是安装脚本等)但不要开始下载,因为插件已经放置正确吗?

如果我在插件目录中运行composer install,composer 会将供应商直接下载到插件目录中 - 存在所有问题(重复依赖项,未集成到自动加载等)。

感谢您的帮助!

【问题讨论】:

    标签: php composer-php dependency-management


    【解决方案1】:

    您正在寻找的是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 包)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 2017-03-13
      • 2018-10-21
      • 2014-01-29
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多