从 GitLab 安装自定义 Composer 包

Posted

技术标签:

【中文标题】从 GitLab 安装自定义 Composer 包【英文标题】:Installing A Custom Composer Package from GitLab 【发布时间】:2016-07-25 23:16:34 【问题描述】:

我创建了一个简单的测试 wordpress 插件。该插件由一个 php 文件 (kreplach.php) 和一个 composer.json 组成:

kreplach.php

<?php
    /*
    Plugin Name: kreplach
    Plugin URI: http://gitlab.example.com/sales/kreplach
    Description: just a test
    Author: Foo Bartok
    Version: 1.0
    Author URI: http://example.com
    */
?>

composer.json


    "license": "MIT",
    "name": "sales/kreplach",
    "type": "wordpress-plugin",
    "description": "just a test",
    "authors": [
        
            "name": "Foo Bartok",
            "email": "foo@example.com",
            "homepage": "example.com"
        
    ],
    "require": 
        "composer/installers": "*"
    

在我的开发服务器上,我有以下 composer.json

服务器的 composer.json


    "repositories": [
        
            "type": "composer",
            "url": "https://wpackagist.org"
        ,
        
            "type": "vcs",
            "url": "git@gitlab.example.com:sales/kreplach.git"
        
    ],
    "require": 
        "php": ">=5.4",
        "wpackagist-plugin/akismet": "*",
        "wpackagist-plugin/contact-form-7": "*",
        "wpackagist-plugin/wordpress-importer": "*",
        "sales/kreplach": "master",
        "johnpbloch/wordpress": "4.*",
        "composer/installers": "*"
    ,
    "extra": 
        "wordpress-install-dir": "wp"
    

我认为应该发生的事情:

    Composer 在 git repo 中查找 composer.json Composer 匹配在构建主机的 composer.json 中找到的名称“sales/kreplach” Composer 将 master 分支的内容复制到我的构建主机上的 wp-content/plugins/kreplach。 按照设计,我的假插件什么都不做。

实际发生的情况:

苦涩的失败。

Loading composer repositories with package information Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - The requested package sales/kreplach could not be found in any version, there may be a typo in the package name.

Potential causes:
 - A typo in the package name
 - The package is not available in a stable-enough version according to your minimum-stability setting
     see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.

Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.

我已测试将 sales/kreplach 存储库克隆到我尝试安装插件的同一主机上。

为了确保 composer 实际上是从 git 存储库中读取 composer.json 文件,我引入了一个错字(是的,完全是故意的,就像),它抛出了一个“嘿,这个 json 文件坏了,泡沫头”错误.

我的 gitlab 版本是综合版 8.6.4(今天安装)。

我已经成功地使用 pip/requirements.txt 完成了同样的技巧来安装自定义 python 模块,所以我不习惯遵循指示。我错过了一个步骤,还是某种不明显(至少对我而言)的命名法?

【问题讨论】:

您最终找到解决方案了吗?我遇到了同样的问题 【参考方案1】:

我没有使用过 gitlab,但在 Bitbucket 和 GitHub 中使用过这种方法。

您需要在服务器的 composer.json 中指定"sales/kreplach": "dev-master" - 注意分支名称必须以“dev-”为前缀。

显然 Composer 对 GitHub 和 BitBucket 有特殊的支持,这对于 Gitlab 可能不存在......所以你 may need to specify git as the repository type 而不是 vcs

祝你好运!

参考:

https://lornajane.net/posts/2014/use-a-github-branch-as-a-composer-dependency https://getcomposer.org/doc/05-repositories.md#vcs https://getcomposer.org/doc/05-repositories.md#git-alternatives

【讨论】:

【参考方案2】:

5 年后的 2021 年更新,自 GitLab 13.3 (Aug. 2020) 以来,GitLab(即使是免费版)有一个 Package Registry,将 GitLab 建立为私有存储库。

您可以在其中发布 Composer packages,并使用 GitLab 13.11(2021 年 4 月):

将 Composer v2 与 GitLab 包注册表一起使用

您使用Composer 发布、共享和下载您的 PHP 依赖项到您的 GitLab 项目。六个月前,Composer 发布了一个新的主要版本 (v2),其中包含多项更改,包括显着的性能改进、架构更新和运行时功能。 您可以阅读有关更改的更多信息here。

直到最近,您还无法利用这些改进,因为 GitLab 注册表不支持 Composer v2。 这完全阻止了你们中的一些人使用 GitLab 注册表。

作为 MVC,我们专注于添加对强制参数 metadata-URL 的支持。我们添加了一个新端点 GET group/:id/-/packages/composer/p2/:package_name,它返回您存储库中所有包的元数据。 当 Composer 查找包时,它会将 %package% 替换为包名并获取该 URL。

这意味着我们添加了一个新端点 GET group/:id/-/packages/composer/p2/:package_name,它将返回您存储库中所有包的元数据。

请注意,有两个参数被视为可选参数。 我们有待解决的问题以添加对 providers-apilist-api 参数的支持。我们希望在即将到来的里程碑中优先考虑它们。

请参阅 Documentation 和 Issue。

并且(仍然是GitLab 13.11,2021 年 4 月):

从版本控制下载 Composer 依赖项

下载 Composer 依赖项时有两个选项:sourcedist。对于稳定版本,Composer 默认使用dist,并将依赖项下载为zip 文件。

不过,您也可以直接从版本控制中下载。 如果启用了--prefer-source,Composer 会将您的依赖项下载为 Git 克隆,而不是打包的 zip 文件。

如果您想对项目进行错误修复并直接获取依赖项的本地 Git 克隆,这将非常有用。

直到最近,您在下载 Composer 依赖项时还不能使用 prefer-source 和相关的 preferred-install 命令和配置。 这使你们中的许多人无法将 GitLab 包注册表用于您的 Composer 依赖项。

我们很高兴地宣布,您现在可以从源代码下载 Composer 依赖项。 只需将prefer-source 选项添加到您的安装命令中即可,如下所示:composer update --prefer-source

请参阅 Documentation 和 Issue。

【讨论】:

以上是关于从 GitLab 安装自定义 Composer 包的主要内容,如果未能解决你的问题,请参考以下文章

自定义包的 Composer 安装路径

自定义包的类不会使用composer autoloader自动加载

Laravel - 在部署自定义 Artisan 命令时未部署 composer.json 文件

composer开发自定义包(基于git,Packagist)-(方式二)

CentOS 自定义安装GitLab

转正确的 Composer 扩展包安装方法