Laravel Forge部署后需执行composer update才能正常使用helper函数问题
问题原因
你把助手文件的自动加载配置放在了autoload-dev节点下,这个配置仅在开发环境生效。生产环境部署时,通常会执行composer install --no-dev --optimize-autoloader这类命令,--no-dev参数会跳过所有autoload-dev里的配置,导致app/helpers.php不会被自动引入,自然找不到userName()函数。
而执行composer update后恢复正常,是因为默认情况下composer update不会自动带上--no-dev参数,会加载autoload-dev的配置,助手文件被引入,函数就能正常调用了。
解决方法
1. 调整composer.json的自动加载配置
把helpers.php从autoload-dev的files数组移到autoload节点下,这样不管是开发还是生产环境,都会自动加载这个文件:
{ "autoload": { "psr-4": { "App\\": "app/", // 保留其他原有psr-4配置 }, "files": [ "app/helpers.php" ] }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } // 移除原来autoload-dev里的files配置 } }
2. 更新自动加载映射
修改完composer.json后,本地执行:
composer dump-autoload
生产环境部署时,确保执行的composer命令包含更新自动加载的步骤,比如:
composer install --optimize-autoloader --no-dev
额外提示
- 不要把生产环境需要用到的文件放在
autoload-dev里,这个节点是专门用来存放开发、测试相关的依赖和配置的。 - 检查你的Laravel Forge部署脚本,确认composer命令是否正确添加了
--no-dev参数,避免后续部署再出现类似问题。
内容的提问来源于stack exchange,提问作者Hardist
相关产品推荐
相关产品推荐

