使用(独立)模块化项目安装多个 Composer

Posted

技术标签:

【中文标题】使用(独立)模块化项目安装多个 Composer【英文标题】:Multiple Composer Installs with (Independent) Modular Projects 【发布时间】:2017-12-13 10:31:23 【问题描述】:

我正在努力寻找将 composer 用于模块化结构的最佳方式。

假设我有这个框架树:

/cms/site/addons

假设开发人员可以使用插件来添加他们的composer.json 安装项目。 赞/site/addons/MyNewFeature/composer.json

所以下一个问题是/vendor 位置。如果每个插件都有一个/vendor 目录,我是否应该在主框架中自动加载它们,我认为这样的性能会太多,并且多个作曲家安装可能会安装很多相同的依赖项。而且我不能让它们都安装在同一个/vendor 目录中,比如/site/addons/vendor,因为composer 会自动删除当前安装中未包含的所有项目并使用它自己的锁定文件。

您如何为基于模块化项目的系统安装多个作曲家?虽然每个项目都需要自己的作曲家供应商,但为了性能,最好只包括 1 个供应商安装。我还没有找到解决方案,想知道你们中是否有人有想法或引导我走向正确的方向。

这几乎就像您需要一个主要的composer.json 安装,它会自动转到每个插件并安装它们......

另一种解决方案是对所有插件(安装/更新)使用作曲家,这给了我较少的控制权,并且对位于 /vendor 目录中的所有内容提出了问题。

【问题讨论】:

【参考方案1】:

经过一些研究和测试,我遇到了这个概念。

这允许框架按照其设计方式手动安装/更新插件,并在主composer.json 文件中使用repositories 通配符路径。

"repositories": [
        
            "type": "path",
            "url": "../site/addons/*",
            "options": 
                "symlink": false
            
        
    ]

现在它将检查 composer.json 文件的所有插件目录,并将它们的所有依赖项安装到一个通用的 /vendor 目录中,就像我最初想要的那样。

我不确定这样做以后可能会出现什么问题,但到目前为止,这提供了我想要的控制。

框架只需要确保主 json 中的 require 具有所有启用的插件。

https://getcomposer.org/doc/05-repositories.md#path

【讨论】:

以上是关于使用(独立)模块化项目安装多个 Composer的主要内容,如果未能解决你的问题,请参考以下文章

电气公司都在用的独立式IO模块

虚拟化概述

Composer & Laravel 包本地开发

win10安装composer时,提示找不到php拓展的模块,这是为啥

如何使用 composer 安装 Magento2 示例模块?

使用composer安装多个包?