【问题标题】:Managing bundle in custom composer repository在自定义作曲家存储库中管理捆绑包
【发布时间】:2015-09-20 11:28:24
【问题描述】:

我的 Symfony2 (GregCMS) 项目包含几个可以单独使用的 Bundle。 我创建了一个由我的项目启动的裸本地存储库 (RepoGregCMS)。

我真的需要将我的包嵌入到单个 Symfony 项目中。此外,我不能使用 github:repo 必须远离互联网。

我希望能够使用来自任何其他项目的我的项目包。这些捆绑包用于设置新项目,其中包含一些客户愿意付费的功能。

所以我在 GregCMS/src/GregCMS/CoreBundle 以及 GregCMS/src/GregCMS/WidgetsBundle 中创建了一个 composer.json 文件。

例如:

{
    "name" : "gregcms/corebundle",
    "description" : "Greg CMS core bundle",
    "type" : "symfony-bundle",
    "authors" : [{
        "name" : "Greg",
        "email" : "author@mail.com"
    }],
    "keywords" : [
        "cms core bundle"
    ],
    "license" : [
        "MIT"
    ],
    "require" : {
    },
    "autoload" : {
        "psr-0" : {
            "GregCMS\\CoreBundle" : ""
        }
    },
    "target-dir" : "GregCMS/CoreBundle",
    "repositories" : [{
    }],
    "extra" : {
        "branch-alias" : {
            "dev-master" : "1.0-dev"
        }
    }
}

现在,我想做的是创建一个需要我的 CoreBundle 的新 Symfony 项目。

我创建了项目,然后在其 composer.json 中添加了以下行:

...
"gregcms/corebundle" : "dev-master"
...

我还添加了存储库路径:

...
"repositories": [
    {
        "type": "git",
        "url": "../RepoGregCMS"
    }
],
...

这么说,我尝试安装新创建的依赖,但我终于得到了这个错误:

[Composer\Repository\InvalidRepositoryException]                                                 
No valid composer.json was found in any branch or tag of ../RepoAubergineCMS, could not load a   
  package from it.

我认为我的存储库已经启动,因此不包含文件或目录这一事实让作曲家发疯了。

我还尝试指向我的存储库 (GregCMS) 的本地分支,并且几乎可以正常工作。我有以下错误:

The requested package gregcms/corebundle could not be found in any version, there may be a typo in the package name

如何使用 composer 让我的 Bundle 可用于其他项目?这甚至是尝试指向裸存储库的好习惯吗? 我想说的是,我正在尝试做的事情与 Sensio 对 symfony 所做的事情相同:在一个项目/repo 中创建多个组件,并能够单独或同时使用它们。

我有点迷路了。感谢您的帮助

编辑:

我成功地创建了一个裸存储库并将其用作指定的 CVS。但我仍然收到有关未找到包的错误。我不知道为什么我会遇到这个错误。配置文件与其他文件相同。我错过了一些东西,但不知道是什么。

【问题讨论】:

    标签: git symfony composer-php bundle


    【解决方案1】:

    每个包都应该在根级别有一个适当的composer.json。如果你想拥有像 "gregcms/gregcms" 这样的包,你必须为 GregCMS 创建一个 composer.json,而像 "gregcms/corebundle" 这样的所有其他包也应该在存储库的根目录中拥有它的 composer.json,而不是在像 GregCMS/src/GregCMS/CoreBundle 这样的子目录中. Symfony 也有一个用于main package 和一个用于every subpackage。 Symfony(和其他一些项目)管理这种称为“子树拆分”的技术。

    顺便看看https://about.gitlab.com/gitlab-com/,他们免费提供无限制的私人存储库托管。

    【讨论】:

    • 这仍然无法使用裸存储库。我的问题就是这样,我如何设法将作曲家与裸存储库一起使用?这甚至可能吗?
    • 是的,您也可以使用裸存储库,因为 composer 会克隆存储库,但您需要添加适当的 composer.json 文件。但请注意,这样您的项目将无法移植。
    • “不可移植”是什么意思?
    • 如果没有裸存储库,您将无法在其他机器上运行 composer install 或 update。
    • 什么会阻止它?
    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2017-04-26
    • 1970-01-01
    • 2012-07-14
    • 2023-03-21
    相关资源
    最近更新 更多