首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当使用本地存储库时,Composer只安装require和require块中的内容,而不安装依赖项。

当使用本地存储库时,Composer只安装require和require块中的内容,而不安装依赖项。
EN

Stack Overflow用户
提问于 2022-08-28 09:08:08
回答 1查看 90关注 0票数 3

在正常情况下,如果我删除vendor文件夹和composer.lock文件,然后运行composer install,它将重新安装所有东西,包括requirerequire-dev块中的包的依赖项。但是,当我使用本地存储库中的composer install时,它只安装requirerequire-dev内部的内容。

这是一个干净的Laravel 9项目的composer.json示例:

代码语言:javascript
运行
复制
{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",    
    "require": {
        "php": "^8.0.2",
        "guzzlehttp/guzzle": "^7.2",
        "laravel/framework": "^9.19",
        "laravel/sanctum": "^3.0",
        "laravel/tinker": "^2.7"

    },
    "require-dev": {
        "fakerphp/faker": "^1.9.1",
        "laravel/pint": "^1.0",
        "laravel/sail": "^1.0.1",
        "mockery/mockery": "^1.4.4",
        "nunomaduro/collision": "^6.1",
        "phpunit/phpunit": "^9.5.10",
        "spatie/laravel-ignition": "^1.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-update-cmd": [
            "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true,
        "allow-plugins": {
            "pestphp/pest-plugin": true
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

如果运行composer install并设置本地存储库(将以下内容添加到composer.json):

代码语言:javascript
运行
复制
"repositories": [ { "type": "composer", "url": "http://localhost/" } ],

它将只安装上面在requirerequired-dev中定义的11个包,而不是它们的依赖项。然后,它会抛出一个关于丢失的东西的错误:

代码语言:javascript
运行
复制
> @php artisan vendor:publish --tag=laravel-assets --ansi --force

Fatal error: Uncaught Error: Class "Illuminate\Foundation\Application" not found

这一切为什么要发生?我的本地存储库应该可以工作,因为当我将本地存储库安装的11个包与Packagist安装的相同的11个包进行比较时,它们是相同的,因此我知道本地存储库应该有正确的包。

(当然,本地存储库也包含其余的包,而不是这11个包)

EN

回答 1

Stack Overflow用户

发布于 2022-08-28 18:06:30

我找到了解决方案,将来任何人都会遇到这样的问题:即使每个包zip文件都包含composer.json文件,但这还不够,因为Satis不从该文件中读取,而是从您的存储库读取元数据。

因此,设置satis.json以包括Composer工作所需的所有元数据字段(即root字段)是很重要的。

在我的例子中,我只在requireautoload字段中使用satis.json,这导致了这个问题。

在添加了所有必需的字段-- requireautoloadconflictreplaceprovidesuggest之后,一切都成功了!

  • 并不是所有的包都有所有这些字段,我编写了一个脚本,只添加当前字段
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73517380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档