【问题标题】:Composer - Private package not getting into autoloaderComposer - 私有包没有进入自动加载器
【发布时间】:2019-10-15 02:29:12
【问题描述】:

我创建了一个自定义包,它位于我们的 GitLab 存储库中,这是它的 composer.json:

{
    "name": "TeamScanblox/InternalAPI_Ref",
    "description": "",
    "keywords": [
        "swagger",
        "php",
        "sdk",
        "api"
    ],
    "homepage": "http://swagger.io",
    "license": "proprietary",
    "authors": [
        {
            "name": "Swagger and contributors",
            "homepage": "https://github.com/swagger-api/swagger-codegen"
        }
    ],
    "require": {
        "php": ">=5.5",
        "ext-curl": "*",
        "ext-json": "*",
        "ext-mbstring": "*",
        "guzzlehttp/guzzle": "^6.2"
    },
    "require-dev": {
        "phpunit/phpunit": "^4.8",
        "squizlabs/php_codesniffer": "~2.6",
        "friendsofphp/php-cs-fixer": "~2.12"
    },
    "autoload": {
        "psr-4": { "InternalAPI\\Ref\\" : "lib/" }
    },
    "autoload-dev": {
        "psr-4": { "InternalAPI\\Ref\\" : "test/" }
    }
}

这是它的文件夹顶层结构:

我将它作为 "TeamScanblox/InternalAPI_Ref": "*" 包含在我需要它的顶级项目的 composer .json 中,问题是它不会通过 PSR-4 自动解析和包含在那个项目。包含它并使其正常工作的唯一方法是在项目的“psr-4”中添加“InternalAPI\Ref\”:“vendor/TeamScanblox/InternalAPI_Ref/lib/”。这是为什么?我做错了什么/没有做对让它自动加载?

我将它包含在项目的 composer.json 中,如下所示:

{
  "type": "package",
  "package": {
    "name": "TeamScanblox/InternalAPI_Ref",
    "version": "1.0.0",
    "type": "package",
    "source": {
      "url": "git@gitlab.com:TeamScanblox/InternalAPI_Ref.git",
      "type": "git",
      "reference": "master"
    }
  }
}

【问题讨论】:

    标签: php composer-php


    【解决方案1】:

    如果您使用 package 类型将您的库包含在应用程序中,那么 Composer 所知道的关于该库的所有内容都必须在 package 描述中提及,包括自动加载和任何其他要求。

    通常,只有当您无法更改代码的来源时,才应使用此 package。幸运的是,您可以完全控制库的存储库,只需将 Composer 指向它即可。

    "repositories": [{
        "type": "vcs",
        "url": "ssh://git@somewhere/path/repo.git"
    }]
    

    使用此示例代替"type": "package",Composer 将联系存储库并读取它的composer.json,检测所有依赖项和自动加载,并像任何外部包一样安装它。

    请注意,您必须添加您使用的每个内部存储库。 Composer 不遵循库的 repository 指针,它们都必须在应用程序的根 composer.json 中复制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-20
      • 2013-02-17
      • 1970-01-01
      • 2013-06-16
      • 2017-06-13
      • 2019-01-22
      • 1970-01-01
      • 2016-06-10
      相关资源
      最近更新 更多