composer dump-autoload --no-dev 报错问题

问题描述

“autoloader文件” 是指 vendor/composer/ 下的那几个 以autoload_ 开头的文件。

我想观察下 composer dump-autoload 执行后 autoloader文件中的变化情况,所以新创建了一个laravel项目,然后执行 dump-autoload 命令,并且分别尝试了 -o 和 –no-dev命令选项。先是执行了 composer dump-autoload 没有报错(autoloader文件中有变化,没啥影响,只是位置信息的变化),然后执行composer dump-autoload -o 也没用问题,然后执行 composer dump-autoload –no-dev 就提示某些类找不到。后来也尝试了 composer dump-autoload -o –no-dev,也试了重新创建了新项目直接执行 composer dump-autoload –no-dev 还是不行。

发现

composer dump-autoload –no-dev 执行后 Facade\Ignition 命名空间对应的映射关系 在 autoloader文件中消失了,但是 Facade\Ignition 命名空间并非在 autoload-dev 块中。
facade/ignition 包的json文件(没有改动过):

{
    "name": "facade/ignition",
    "description": "A beautiful error page for Laravel applications.",
    "keywords": [
        "error",
        "page",
        "laravel",
        "flare"
    ],
    "homepage": "https://github.com/facade/ignition",
    "license": "MIT",
    "require": {
        "php": "^7.2.5|^8.0",
        "ext-json": "*",
        "ext-mbstring": "*",
        "facade/flare-client-php": "^1.9.1",
        "facade/ignition-contracts": "^1.0.2",
        "illuminate/support": "^7.0|^8.0",
        "monolog/monolog": "^2.0",
        "symfony/console": "^5.0",
        "symfony/var-dumper": "^5.0",
        "ext-curl": "*"
    },
    "require-dev": {
        "friendsofphp/php-cs-fixer": "^2.14",
        "livewire/livewire": "^2.4",
        "mockery/mockery": "^1.3",
        "orchestra/testbench": "^5.0|^6.0",
        "psalm/plugin-laravel": "^1.2"
    },
    "suggest": {
        "laravel/telescope": "^3.1"
    },
    "config": {
        "sort-packages": true
    },
    "extra": {
        "branch-alias": {
            "dev-master": "2.x-dev"
        },
        "laravel": {
            "providers": [
                "Facade\\Ignition\\IgnitionServiceProvider"
            ],
            "aliases": {
                "Flare": "Facade\\Ignition\\Facades\\Flare"
            }
        }
    },
    "autoload": {
        "psr-4": {
            "Facade\\Ignition\\": "src"
        },
        "files": [
            "src/helpers.php"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Facade\\Ignition\\Tests\\": "tests"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "psalm": "vendor/bin/psalm",
        "format": "vendor/bin/php-cs-fixer fix --allow-risky=yes",
        "test": "vendor/bin/phpunit",
        "test-coverage": "vendor/bin/phpunit --coverage-html coverage"
    },
    "support": {
        "issues": "https://github.com/facade/ignition/issues",
        "forum": "https://twitter.com/flareappio",
        "source": "https://github.com/facade/ignition",
        "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction"
    }
}

版本信息

laravel: 8.6.12
php: 7.4.3
composer: 2.4.4

问题重现

composer create-project "laravel/laravel:8.6.12" ./
composer dump-autoload --no-dev

报错信息

composer dump-autoload --no-dev 报错问题

其他描述

其实不光是这一个版本,其他版本也有类似的问题。希望大家能帮忙看下,谢谢!

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

dump-autoload 是更新自动加载文件的映射,你安装 composer 包了吗?

composer create-project "laravel/laravel:8.6.12" ./
composer install --no-dev
1年前 评论
hepijiu888 (楼主) 1年前
hepijiu888 (楼主) 1年前
nff93 1年前
hepijiu888 (楼主) 1年前
岭南伊爸 (作者) 1年前
讨论数量: 11

dump-autoload 是更新自动加载文件的映射,你安装 composer 包了吗?

composer create-project "laravel/laravel:8.6.12" ./
composer install --no-dev
1年前 评论
hepijiu888 (楼主) 1年前
hepijiu888 (楼主) 1年前
nff93 1年前
hepijiu888 (楼主) 1年前
岭南伊爸 (作者) 1年前

之前我看了好几篇关于 composer dump-autoload 的文章,上面提到线上执行 composer dump-autoload -o --no-dev 会提升自动加载性能,我也知道 --no-dev 是生成classmap的时候去掉 autoload-dev 块中的命名空间文件映射,但是我执行就报错,不知道大家有没有遇到类似的情况呢

1年前 评论

我试了下貌似也是这样,,,可能是他的包自动发现的 bug,没考虑这种情况。

你除非把 require-dev 里面的全部加到 dont-discover 里面,但是这样你得全部手动注册下 service provider

1年前 评论
hepijiu888 (楼主) 1年前
largezhou (作者) 1年前
hepijiu888 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!