Laravel 11 Vite将public目录改为public_html失败求助
Laravel 11 Vite 改 public 为 public_html 踩坑解决
你遇到的问题是因为配置没做全——Laravel 11 切换默认 public 目录到 public_html,光改 vite.config.js 和 AppServiceProvider 不够,还有几个关键配置没跟上,导致系统还是默认去原 public 目录找 manifest 文件。以下是完整的修正步骤:
1. 补全 vite.config.js 配置
得保证你的 vite.config.js 里明确指定输出到 public_html,代码如下:
import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; export default defineConfig({ plugins: [ laravel({ input: ['resources/css/app.css', 'resources/js/app.js'], publicDirectory: 'public_html', // 核心:指定资源输出目录 buildDirectory: 'build', // 保持默认build子目录,也可以自定义 }), ], });
2. 完善 AppServiceProvider 绑定
在app/Providers/AppServiceProvider.php的boot方法里,覆盖默认的 public 路径绑定:
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { public function boot(): void { // 覆盖默认的public路径绑定 $this->app->bind('path.public', function () { return base_path('public_html'); }); } }
3. 必须改 bootstrap/app.php(Laravel 11 新增)
Laravel 11 把核心配置移到了bootstrap/app.php,这里必须指定 public 路径,否则系统还是认原来的 public 目录:
return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { // 你的中间件配置 }) ->withExceptions(function (Exceptions $exceptions) { // 你的异常配置 }) ->withPublicPath(publicPath: __DIR__.'/../public_html') // 新增这一行,指定public_html为根目录 ->create();
4. 配置 .env 文件
在根目录的.env里加一行,明确 public 路径:
PUBLIC_PATH=public_html
5. 清理缓存+重新构建
做完上面的配置,先清缓存:
php artisan cache:clear php artisan config:clear
然后重新构建资源,让 Vite 把文件输出到 public_html:
npm run build
现在再访问项目,应该就不会再找 public 下的 manifest 了。
内容的提问来源于stack exchange,提问作者Ptrckk
相关产品推荐
相关产品推荐

