如何开发和包含 Composer 包?

2022-08-30 09:37:40

我希望用PHP开发一个包,但我不希望它立即在GitHub或其他地方可用。在我的中包含一个 Packagist 文件很容易,但是如何将本地包添加到我的 ?另外,我应该在(相对于根目录)中构建包,还是应该将其放在其他地方?composer.jsoncomposer.json/vendor/foo/barcomposer.json

编辑:我想我的问题是关于其他人如何编写他们的软件包。是否每个新包都会添加到 Packagist 中,然后当你想要测试你的更改时,你提交到 GitHub(或任何地方),然后通过 Composer 将其拉回?这似乎非常低效。


答案 1

您可以告诉 Composer 使用任何本地路径,而不是创建新的存储库:

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

例如,假设您在~/devel/projects

您可能在 中包含主项目,而在 中设置“本地包”~/devel/projects/main_project~/devel/projects/local_package

为本地包定义作曲家配置。在。~/devel/projects/local_package/composer.json

{
    "name": "your_vendor_id/your_local_package",
    ...
}

然后,可以通过路径存储库编辑并链接到本地包:~/devel/projects/main_project/composer.json

"repositories": [
    {
        "type": "path",
        "url": "../local_package",
        "options": {
            "symlink": true
        }
    }
],
"require": {
    "your_vendor_id/your_local_package": "dev-master",
    ...
}

有关此链接的更多信息(不是由我撰写的,但对这个主题有很好的解释):

https://carlosbuenosvinos.com/working-at-the-same-time-in-a-project-and-its-dependencies-composer-and-path-type-repository/


答案 2

由于这个问题有许多不同的组件/标准需要解释,我将尝试在这里尽可能多地解释,你可以PM我或者只是谷歌它,以获得更具体的问题。

要回答您的第一个问题,“如何将本地包添加到我的包中?composer.json

如果“添加本地包”是指自动加载类/包,则可以通过在 Composer 中使用 PSR-4 或 PSR-0 或 Classmap 选项来执行此操作。

阅读更多

如果您需要有关PSR-0,PSR-4和Classmap的更多信息,可以Google它。

"autoload": {
   "psr-4": { "Core\\": "src/Core" }  ## "standard": { "namespace" : "path/to/dir"}
}

或 (编辑)

如果您真的想添加本地包:

  1. 为本地包创建一个,如下所示:composer.json

    {
       "name": "localPackage/core",
       "version": "dev-master"
    }
    

    还可以根据需要指定其他属性和/或依赖项。

  2. 压缩包,将文件作为根文件放在 中,并将其放在所需的位置。composer.jsonarchive.zip

  3. 在要包含本地包的其他项目/包中,将本地包名称添加到必需参数中,例如

    "localPackage/core": "dev-master"
    

    在参数下添加以下内容:repositories

    "repositories" : [
        {
            "type": "artifact",
            "url": "path/to/localPackage.zip"
        }
    ]
    

现在,如果您在git上有本地包,则无需存档包(基本上省略了步骤2),您只需要将上面示例中的URL替换为.path/to/localPackage/.git

(编辑结束)


现在回答一个更大的问题:“我如何开发和包含 Composer 包?

  1. 确定目录结构。通常如下所示:

    /PackageRoot
        /src/PackageCore
        composer.json   ## this is your library’s composer.json
        LICENSE
    

    并设置您的 .composer.json

    其中一个地雷文件的例子可以在 http://pastebin.com/tyHT01Xg 找到。composer.json

  2. 将其上传到Github标记版本。使用语义版本控制(确保在上传到 Github 时排除/忽略该目录)。vendor

  3. Packagist 注册软件包(登录后)。

    如果您已将提交标记为(或类似),则这将显示在该软件包的 Packagist 仪表板中。v1.0.0

现在,如果一切正确,您应该能够通过将库添加到该项目的库中作为其他项目中的依赖项。composer.json


推荐