Composer 未安装本地包依赖项

Miu*_*shi 2 laravel composer-php laravel-5.4

在我的 Laravel 5.4 composer.json 文件中,我有以下自动加载我的自定义包。请注意,此包未发布,而是在本地加载。

"autoload": {
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/",
        "Vendor\\Module\\": "packages/vendor/module/src"
    }
},
Run Code Online (Sandbox Code Playgroud)

然后在我的包 composer.json 文件中,我有以下内容

{
    "name": "vendor/module",
    "description": "A custom package",
    "version": "1.0.0",
    "type": "project",
    "authors": [
    ],
    "minimum-stability": "dev",
    "require": {
      "laravelcollective/html": "^5.4.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我从 Laravel 根目录运行composer install时,它永远不会选择我需要的 laravelcollective/html 包。

有没有办法加载未发布的本地包的依赖项?

Miu*_*shi 6

我相信我找到了一个解决方案,尽管它可能不是本地包开发的最佳方法,但它对我有用。

在根 composer.json 文件中,我添加了以下内容并从应用程序根目录运行composer update似乎现在可以获取包及其依赖项并将所有内容安装到根应用程序的主要供应商目录中。

"repositories": [
    {
        "type": "path",
        "url": "packages/vendor/module"
    }
],
"require-dev": {
    "fzaninotto/faker": "~1.4",
    "mockery/mockery": "0.9.*",
    "phpunit/phpunit": "~5.7",
    "vendor/module": "1.0.*"
},
"autoload": {
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/",
        "Vendor\\Module\\": "packages/vendor/module/src"
    }
},
Run Code Online (Sandbox Code Playgroud)

这种方法的好处是它只为自定义包创建一个符号链接,因此您可以继续在包目录中写入更新,如果您设置了类型,更改将生效,而不必提交到本地 git 存储库到composer.json的存储库字段中的vcs

我还必须在require-dev字段中指定版本号,以便它通过版本约束,否则在运行 Composer 时您会收到一个警告,指出该包不符合最低版本要求。