首页 > 解决方案 > 未找到 Composer 自定义私有包

问题描述

我有一个私有的包回购,我正试图在我作为作曲家包工作的公司内部发布。

我用以下composer.json文件创建了包:

{
    "name": "my_team/package_name",
    "description": "Package Description",
    "homepage": "https://git.company.com/MyTeam/package_name",
    "type": "library",
    "license": "Proprietary",
    "minimum-stability": "stable",
    "version": "1.4",
    "require": {
        "php": ">=7.1.0",
        "ext-curl": "*",
        "ext-json": "*"
    },
    "autoload": {
        "psr-4": {
            "PackageNamespace\\": "src/"
        }
    }
}

包中的所有路径都是正确的,我在 Enterprise Github Repo 上创建了一个标签和发布,其中包含 v1.4 包的 zip 文件。

我想测试这个包是否有效,所以我创建了一个测试脚本来运行它,它有以下composer.json文件:

{
    "name": "benjam/test",
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "my_team/package_name",
                "version": "1.4",
                "dist": {
                    "type": "zip",
                    "url": "https://git.company.com/MyTeam/package_name/archive/v1.4.zip"
                }
            }
        }
    ],
    "require": {
        "my_team/package_name": "1.4"
    }
}

和一个main.php包含以下内容的文件:

<?php

require __DIR__ . '/vendor/autoload.php';

$obj = new PackageNamespace\ClassName();

当我尝试运行该文件时,出现以下错误:

PHP Fatal error:  Uncaught Error: Class 'PackageNamespace\ClassName' not found in C:\Development\test\main.php:5
Stack trace:
#0 {main}
  thrown in C:\Development\test\main.php on line 5

Fatal error: Uncaught Error: Class 'PackageNamespace\ClassName' not found in C:\Development\test\main.php on line 5

Error: Class 'PackageNamespace\ClassName' not found in C:\Development\test\main.php on line 5

Call Stack:
    0.2130     353200   1. {main}() C:\Development\test\main.php:0

所以似乎作曲家自动加载器没有看到已安装的包。

我做错了什么?

composer.json我尝试过的其他测试脚本设置是:

    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "my_team/package_name",
                "version": "1.4",
                "source": {
                    "type": "git",
                    "url": "https://git.company.com/MyTeam/package_name",
                    "reference": "origin/master"
                }
            }
        }
    ],

标签: phpcomposer-php

解决方案


我遇到的问题是 Github 在标记发布时自动生成的 zip 文件在存档的顶层中没有该文件。composer.json

因为 composer 使用该文件中的信息来创建自动加载设置,所以它成功地导入和安装了包,但没有设置自动加载设置。

我已将测试脚本composer.json文件更改为以下内容,并且可以正常工作:

(请注意,repo 中有一个名为 的标签v1.4

{
    "name": "benjam/test",
    "repositories": [
        {
            "type": "vcs",
            "url": "git@git.company.MyTeam/package_name.git"
        }
    ],
    "require": {
        "my_team/package_name": "v1.4"
    }
}

推荐阅读