【问题标题】:Setup a project with Composer by using custom repositories and packages使用自定义存储库和包使用 Composer 设置项目
【发布时间】:2020-11-10 06:03:50
【问题描述】:

我正在尝试设置一个作曲家项目,该项目将使我能够设置自己的框架并提取存储在 github 私有 repos 中的任何给定依赖项。

首先是一些先决条件:

  1. 我不想向 packagegist 添加代码。
  2. 我想确保我的供应商文件夹尽可能干净。

框架composer.json

{
    "name": "mycompany/myframework",
    "description": "YET another Framework",
    "type": "project",        
    "repositories": [
        {
          "type": "package",
          "package": {
             "name": "mycompany/system",
             "version": "0.0.2",
             "type": "library",
             "source": {
                "url": "https://github.com/mycompany/system.git",
                "type": "git",
                "reference": "master"
             }            
          }
       }
   ],
   "require": {                
       "mycompany/system": "0.0.2",
       "mnsami/composer-custom-directory-installer": "1.1.*"        
   },    
   "license": "proprietary",
   "authors": [...],      
   "extra":{
       "installer-paths":{}
   }
}

我的公司/系统 composer.json

{
    "name": "mycompany/system",
    "type": "library",
    "description": "utility belt xD"
}

PHP 中的类代码(来自 mycompany/sytem )具有以下结构:

namespace MYCOMPANY;
//this file name is called utils.php
//adherence to PSR-4 is assumed
class utils  {

}

我的目标是:

我想告诉作曲家它应该创建以下结构:

vendor\MYCOMPANY\utils.php(不是vendor\mycompany\system\utils.php)

稍后,我希望能够添加更多这样的存储库并将它们也存储在 MYCOMPANY 下。框架将解决此设置。

自定义安装由mnsami/composer-custom-directory-installer处理

根据经验,我猜我应该将不同的包保存在它们自己的目录中,但是,因为其他文件将有不同的命名约定,所以不存在被覆盖的风险。

编辑 这可以做到吗? 如果有,怎么做?

提前谢谢你

【问题讨论】:

  • 您的确切问题是什么?到目前为止,您尝试过什么来完成这项工作?是的,这完全可以通过 Composer 的核心功能实现
  • 关于该安装程序的附加提示:我从未听说过,但最后一次代码更改已经有四年了。如果你真的想使用它,也许你想多想
  • @NicoHaase 对此感到抱歉。我在问怎么做。我的尝试导致供应商文件夹包含 mycompany/system 而不是预期的 mycompany。可能吗?我必须做哪些更改才能订购? “别名”配置是 composer 最接近的功能,但我认为这不是它的答案。我在其他地方读到,该模块应该命名为 mycompany/mycompany,以便作曲家采用相同的名称,但其他模块不能具有该名称,我不想在同一个存储库中编写不同的模块。
  • @NicoHaase 安装程序是一个测试。我目前正在阅读 composer 的自定义安装程序功能以检查它们是如何工作的,但我宁愿不使用它们,除非这是最后的手段。
  • 为什么要关心文件的存储位置? Composer 在vendor 文件夹中使用多级结构是很常见的——这是您可以从同一个MYCOMPANY 命名空间获得多个 包的唯一方法

标签: php namespaces composer-php


【解决方案1】:

经过几个小时的工作并在 cmets 中关注@NicoHaase 的回复,我放弃了这个问题。

我试图创建一个干净的文件夹,我可以在其中放置来自不同存储库的所有不同类,但是 composer 不能那样工作。

我希望这会帮助其他想要同样东西的人。

【讨论】:

    猜你喜欢
    • 2016-10-05
    • 2016-04-23
    • 2019-06-28
    • 1970-01-01
    • 2014-03-07
    • 2012-11-01
    • 2023-03-16
    • 2016-07-07
    • 2012-03-07
    相关资源
    最近更新 更多