【问题标题】:Composer require local and github repositoriesComposer 需要本地和 github 存储库
【发布时间】:2019-04-16 04:09:30
【问题描述】:

周六,一个必需的 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
}

vendor_local/werneckbh/laravel-qr-code 上的composer.json

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

vendor_local/werneckbh/qr-code 上的composer.json

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

但是 composer 总是尝试从 Github 加载。

我还尝试通过添加本地存储库

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

但这会引发错误

 [InvalidArgumentException] 
 Could not find package local. 

这可能是混合设置吗?

【问题讨论】:

    标签: composer-php


    【解决方案1】:

    在做了一些更深入的研究如何解决我的问题后,我找到了一种非常简单的注入本地包的方法。 我没有尝试强制 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
    

    安装所有需要的包,这个解决方案是更新保存

    【讨论】:

      【解决方案2】:

      据我了解,url 值应该是包目录的路径(而不是包目录所在的供应商目录的路径)。所以在你的情况下,它可能是:

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

      此外,如果您之前运行过composer install 或者如果您有composer.lock 文件,则应该运行composer update。

      【讨论】:

      • 我试过这个,但作曲家总是试图从 Github 下载。即使我在每个本地托管的包中定义“存储库”设置
      • 如果使用“repositories.local”设置,看起来每个包都必须有一个本地 Git 存储库:stackoverflow.com/questions/17426192/…
      • 有趣。我没有意识到这一点。
      猜你喜欢
      • 2017-05-16
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 2019-08-05
      • 2020-12-31
      • 2016-03-18
      • 1970-01-01
      相关资源
      最近更新 更多