
Laravel 的 @push('scripts') 必须在 @component 或 组件调用之前声明,否则脚本不会注入到 @stack('scripts') 中——因为 Blade 渲染顺序决定了堆栈内容仅在当前视图解析阶段收集,组件内联渲染会提前封闭作用域。
laravel 的 `@push('scripts')` 必须在 `@component` 或 `
在 Laravel(尤其是 v8+)中,@push / @stack 机制看似简单,但与 Blade 组件(无论是 @component 语法还是
? 为什么 @push 放在 @component 后面会失效?
Blade 模板在一次 HTTP 请求中按如下逻辑执行:
- 解析当前视图文件(如 example.blade.php);
- 遇到 @component(...) 时,立即渲染该组件视图(相当于子请求级快照),此时主视图的 @push 尚未被扫描;
- 组件内部不参与主视图的 @stack 收集流程(除非组件自身也调用 @push,且该组件被当前页面包含);
- 当解析器后续遇到 @push('scripts') 时,虽已注册内容,但若 @stack('scripts') 在布局中位于 @yield('content') 之后(如你示例中 <script> 在 </script>











