jonbaldie
jonbaldie

Reputation: 378

Private repo composer.json not being used

My problem is that a privately made repo's composer.json seems to be broken when trying to use it as a package elsewhere.

I have a private repo with code needed for other projects. The repo's composer.json looks like this:

{
    "name": "somevendor/global",

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

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

The src is in the base directory of the repo, and contains PSR-4 namespaced classes. I have namespace folders within that, e.g. a Foo directory with classes in the Foo namespace:

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

In the project folder, I'm accessing the somevendor/global repo via a composer.json file:

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

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

Running composer install in the project folder seems to work at first. I have installed SSH keys properly so it can access the private repo on Bitbucket and grab the files:

$ 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

And then in the project's PHP code I require vendor/autoload.php, but none of the classes are being autoloaded, including the Carbon package specified in the first repo's composer.json file:

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

I've clearly made a mistake here, have I structured the first repo wrongly?

Upvotes: 1

Views: 808

Answers (1)

jonbaldie
jonbaldie

Reputation: 378

I "solved" this by taking out all of the "require" entries from the remote repo's composer.json file and moving them to the local website's composer.json file.

This is what the files looked like:

The remote private repo's composer.json:

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

The local website's composer.json:

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

    "repositories": [
        {
            "type": "vcs",
            "url": "[email protected]:somevendor/global.git"
        }
    ]
}

It kept throwing Composer\Repository\InvalidRepositoryException because I forgot to put the name into the remote repo's composer.json file, so don't forget that bit!

Also remember to set up your git ssh keys if you've set them up. I used this Bitbucket tutorial to do this.

Upvotes: 1

Related Questions