0

On Saturday one required Laravel Package was removed from Github completly. But i need this dependency for a Laravel App. The Package i'm talking about is "werneckbh/laravel-qr-code" and its dependency "werneckbh/qr-code" I modified the composer.json at root by adding repository local definition.

Then i run

composer install

composer.json at root

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "type": "project",
    "repositories": {
        "local": {
            "type": "path",
            "url": "vendor_local/werneckbh"
        }
    },
    "require": {
        "php": "^7.1.3",
        "ext-json": "*",
        "akaunting/money": "^1.0",
        "browner12/helpers": "^2.1",
        "cartalyst/stripe-laravel": "2.0.*",
        "doctrine/dbal": "^2.8",
        "fideloper/proxy": "^4.0",
        "illuminate/encryption": "^5.6",
        "illuminate/html": "^5.0",
        "laravel/framework": "5.6.*",
        "laravel/tinker": "^1.0",
        "laravelcollective/html": "^5.4.0",
        "paypal/rest-api-sdk-php": "^1.13",
        "pusher/pusher-php-server": "^3.2",
        "sentry/sentry-laravel": "^0.11.0",
        "werneckbh/laravel-qr-code": "*",
        "werneckbh/qr-code": "*"
    },
    "require-dev": {
        "deployer/deployer": "^6.2",
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.0"
    },
    "autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "scripts": {
        "post-root-package-instaBut composer always tries to load from Github.
Is this possible to have a mixed setupll": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate"
        ],
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover"
        ]
    },
    "config": {
        "preferred-install": "dist",
        "sort-packages": true,
        "optimize-autoloader": true
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

composer.json at vendor_local/werneckbh/laravel-qr-code

{
    "name": "werneckbh/laravel-qr-code",
    "description": "QR Code Generator for PHP wrapper for Laravel",
    "license": "MIT",
    "authors": [
        {
            "name": "Bruno Werneck",
            "email": "brunovaulawerneck@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "werneckbh/qr-code": "^2.1"
    },
    "autoload": {
        "psr-4": {
            "LaravelQRCode\\": "src/"
        }
    },
    "extra": {
        "laravel": {
            "providers": [
                "LaravelQRCode\\Providers\\QRCodeServiceProvider"
            ],
            "aliases": {
                "QRCode": "LaravelQRCode\\Facades\\QRCode"
            }
        }
    }
}

composer.json at vendor_local/werneckbh/qr-code

{
    "name": "werneckbh/qr-code",
    "description": "QR Code Generator for PHP",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "Bruno Vaula Werneck",
            "email": "brunovaulawerneck@gmail.com"
        }
    ],
    "require": {},
    "autoload": {
        "files": [
            "src/helpers/constants.php",
            "src/helpers/functions.php"
        ],
        "psr-4": {
            "QR_Code\\": "src/QR_Code/"
        }
    },
    "require-dev": {
        "khanamiryan/qrcode-detector-decoder": "^1.0",
        "phpunit/phpunit": "^6.5"
    }
}

But composer always tries to load from Github.

I also tried to add a local repository via

composer require local "vendor_local/werneckbh/laravel-qr-code"

but this throw an error with

 [InvalidArgumentException] 
 Could not find package local. 

Is this possible to have a mixed setup?

magic.77
  • 829
  • 1
  • 11
  • 21

2 Answers2

0

After doing some deeper Research how to solve my Problem, i found a very simple way to inject local Packages. Instead of trying to force composer to load from local package composer.json i modified the autoload PSR-4 definition.

First steps where to remove all Packages from vendor folder, deleting composer.lock and then modifying root composer.json like this

...
"autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "files": [
            "vendor_local/werneckbh/qr-code/src/helpers/constants.php",
            "vendor_local/werneckbh/qr-code/src/helpers/functions.php"
        ],
        "psr-4": {
            "App\\": "app/",
            "QR_Code\\": "vendor_local/werneckbh/qr-code/src",
            "LaravelQRCode\\": "vendor_local/werneckbh/laravel-qr-code/src"
        }
    },
...

now running

composer install

installs all needed packages, and this solution is update save

magic.77
  • 829
  • 1
  • 11
  • 21
0

As far as I understand, the url value should be the path to the package directory (and not the path to the vendor directory under which the package directories are). So in your case it could be:

"repositories": {
    "local": {
        "type": "path",
        "url": "vendor_local/werneckbh/qr-code"
    },
   "local": {
        "type": "path",
        "url": "vendor_local/werneckbh/laravel-qr-code"
    }
}

Also, you should run composer update if you've run composer install before or if you have a composer.lock file.

D Malan
  • 10,272
  • 3
  • 25
  • 50
  • I tried this but composer always tries to download from Github. Even if i define "repositories" settings inside each locally hosted Package – magic.77 Apr 17 '19 at 13:52
  • It looks like that there has to be a local Git Repo for each Package if using "repositories.local" settings: https://stackoverflow.com/questions/17426192/composer-using-a-local-repository – magic.77 Apr 17 '19 at 13:57
  • Interesting. I wasn’t aware of that. – D Malan Apr 17 '19 at 16:28