Loading... # [laravel 如何覆盖composer的 vendor类文件?](https://blog.p2hp.com/archives/8207) 作为 Laravel 开发人员,你可能遇到过这样的情况:你不喜欢 vendor 文件夹某个包中的某些代码,并且想要更改它。你可以直接在该文件中更改它。但问题是当你点击composer update命令升级包时很容易覆盖已修改的vendor类文件。 那么有什么解决办法呢? 感谢Composer,它具有覆盖任何包/类的功能。Composer 使用PSR-4来加载类。因此,在 composer.json 中,你可以提及从哪些文件或文件夹加载类。同样你也可以排除加载它。 操作步骤: windows用户 排除文件 请参考下面的示例以了解我如何从包tymon/jwt-auth 中排除 1个文件 "exclude-from-classmap": ["vendor\\tymon\\jwt-auth\\src\\Middleware\\BaseMiddleware.php"], 在上面的例子中可以看出我已经排除了BaseMiddleware.php文件。你必须将此行放在composer.json的autoload段中。这里要注意的一件事是,我在路径中有双反斜杠,那是因为在 Windows 机器上,并且因为它是 JSON 文件,所以我必须在那里转义 (\) ,即写上双反斜杠。 包含文件以覆盖vendor 现在我们已经排除了我们想要覆盖的文件,现在需要包含有更改的新文件,以便 composer 知道要包含哪些文件。 为此,向 composer.json 中的 'psr-4' 键添加另一个键值对,如下所示: "autoload": { "psr-4": { "App\\": "app/", "Tymon\\": "app/Overrides/" }, "exclude-from-classmap": [ "vendor\\tymon\\jwt-auth\\src\\Middleware\\BaseMiddleware.php" ] }, 添加了上面代码中的"Tymon\\": "app/overrides",以指示comopser将文件包含在 app/overrides 文件夹中。 现在创建覆盖文件夹。 从要覆盖的包中复制粘贴所有文件。 根据您的需要更改文件。 在 composer.json 中添加以上行 运行命令“composer dump-autoload”(不带引号) 上面的命令将刷新所有自动加载文件以包含您的新文件。请记住,无论何时更改 composer.json 文件中的任何内容,您都需要触发上述5的命令以反映更改。 对于Unix/Linux用户 Linux 用户的说明是相同的,只是代码会改变,我在下面提到。按照与上述 Windows 用户相同的说明进行操作。 排除文件 如果您在 Linux/Unix 机器上,路径将如下所示: "exclude-from-classmap": ["vendor/tymon/jwt-auth/src/Middleware/BaseMiddleware.php"], 包含文件 "autoload": { "psr-4": { "App\\": "app/", "Tymon\\": "app/Overrides/" }, "exclude-from-classmap": [ "vendor/tymon/jwt-auth/src/Middleware/BaseMiddleware.php" ] }, Overrides 只是一个名字,你可以选择任何你喜欢的。重要的是提供它的 composer.json 文件的相对路径。 谢谢 以上在composer2.0下测试通过, 参考 https://shyammakwana.me/php/laravel-override-vendor-classes.html 最后修改:2023 年 08 月 12 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏