Composer требует локальных и github-репозиториев - PullRequest
1 голос
/ 15 апреля 2019

В субботу один необходимый пакет Laravel был полностью удален из Github. Но мне нужна эта зависимость для приложения Laravel. Пакет, о котором я говорю, это "werneckbh / laravel-qr-code" и его зависимость "werneckbh / qr-code" Я изменил composer.json в корне, добавив локальное определение хранилища.

Тогда я бегу

composer install

composer.json в корне

{
    "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 по адресу 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 по адресу vendor_local / werneckbh / qr-код

{
    "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"
    }
}

Но композитор всегда пытается загрузить с Github.

Я также пытался добавить локальный репозиторий через

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

но это выдает ошибку с

 [InvalidArgumentException] 
 Could not find package local. 

Возможно ли иметь смешанную настройку?

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Насколько я понимаю, значение url должно быть путем к каталогу пакета (а не путем к каталогу вендора, в котором находятся каталоги пакета).Так что в вашем случае это может быть:

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

Кроме того, вы должны запустить composer update, если вы запускали composer install ранее или если у вас есть файл composer.lock.

0 голосов
/ 15 апреля 2019

Проведя более глубокое исследование о том, как решить мою проблему, я нашел очень простой способ внедрения локальных пакетов.Вместо того, чтобы пытаться принудительно загрузить composer из локального пакета composer.json, я изменил определение автозагрузки PSR-4.

Первые шаги, где удалить все пакеты из папки вендора, удалить composer.lock и затем изменить корневой composer.json как этот

...
"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"
        }
    },
...

теперь работает

composer install

устанавливает все необходимые пакеты, и это решение - обновление сохранить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...