私人repo composer.json没有被使用

时间:2016-08-08 22:54:16

标签: php git composer-php

我的问题是私有制造的repo的composer.json在尝试将其用作其他地方的包时似乎被打破了。

我有一个私人仓库,其中包含其他项目所需的代码。 repo的composer.json看起来像这样:

{
    "name": "somevendor/global",

    "require": {
        "nesbot/carbon": "^1.21"
    },

    "autoload": {
        "psr-4": {
            "" : "src/"
        },
        "files": [
            "somedir/somefile.php"
        ]
    }
}

src位于repo的基目录中,包含PSR-4命名空间类。我在其中有名称空间文件夹,例如一个Foo目录,其中包含Foo命名空间中的类:

-- src
      -- Foo
         // some Foo\... classes
   // some global namespace classes
-- somedir
   somefile.php // A file with helper functions

在项目文件夹中,我通过composer.json文件访问somevendor/global repo:

{
    "require": {
        "somevendor/global-folder": "dev-master"
    },

    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "somevendor/global",
                "version": "dev-master",
                "type": "package",
                "source": {
                    "url": "git@bitbucket.org/somevendor/global.git",
                    "type": "git",
                    "reference": "master"
                }
            }
        }
    ]
}

项目文件夹中运行composer install似乎最初有效。我已正确安装SSH密钥,因此它可以访问Bitbucket上的私人仓库并获取文件:

$ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing somevendor/global (dev-master master)
    Cloning master

Writing lock file
Generating autoload files

然后在项目的PHP代码I require vendor/autoload.php中,但没有一个类被自动加载,包括在第一个repo的composer.json文件中指定的Carbon包:

Fatal error: Uncaught Error: Class 'Foo\Foo' not found in...

我在这里犯了一个错误,我是否错误地构建了第一个回购?

1 个答案:

答案 0 :(得分:1)

我通过从远程repo的composer.json文件中取出所有“require”条目并将它们移动到本地网站的composer.json文件来“解决”这个问题。

这就是文件的样子:

远程私人仓库composer.json

{
    "name": "somevendor/global",
    "license": "proprietary",
    "autoload": {
        "psr-4": {
            "" : "src/"
        },
        "files": [
            "functions/functions.php"
        ]
    }
}

本地网站的composer.json

{
    "require": {
        "nesbot/carbon": "^1.21",
        "somevendor/global": "dev-master"
    },

    "repositories": [
        {
            "type": "vcs",
            "url": "git@bitbucket.org:somevendor/global.git"
        }
    ]
}

它不断抛出Composer\Repository\InvalidRepositoryException,因为我忘了将name放入远程仓库的composer.json文件中,所以不要忘记这一点!

还要记得设置你的git ssh键,如果你已经设置好了。我用this Bitbucket tutorial来做这件事。