Laravel 7为什么在/storage/framework/views/生成视图,如何停止生成?
Laravel 7 storage/views 目录自动生成哈希视图文件的原因与处理方式
一、为什么会自动生成这些文件
这不是框架出bug了,是Blade模板引擎从设计之初就内置的标准运行逻辑:
- 你编写的
.blade.php源文件里,带{{ 变量输出 }}、@if、@foreach这类专属标记的内容,不是PHP能直接解析执行的原生代码 - 为了避免每次渲染视图都从头解析Blade语法、拖慢响应速度,Blade编译器会把源视图转换成纯原生PHP代码,持久化存放到默认的
storage/framework/views目录下 - 那些文件名是一长串无意义字符的PHP文件,本质是编译器根据源视图的绝对路径、源文件最后修改时间算出来的SHA1哈希值。框架每次加载视图时会自动校验匹配关系:只要源视图没动过,就直接读对应的缓存文件跳过编译步骤;一旦检测到源视图的修改时间比缓存文件新,就会自动重新编译、生成新的哈希缓存文件。
二、关于停止这类文件自动生成的实际方案
首先要明确:完全禁止视图编译文件落盘,本质是绕过Blade的核心设计逻辑,不建议长期使用这类配置,你可以根据自己的实际需求选择对应的处理方式:
- 如果只是开发过程中看着目录下堆积一堆无意义的哈希文件不舒服,想定期清理:
完全不需要改核心代码。开发环境下框架本身会自动识别源文件的修改状态,废弃的旧缓存本来就不会被加载,只是残留在目录里而已。定期执行php artisan view:clear就能一键清空storage/framework/views下的所有编译残留,不会影响正常的视图加载。 - 如果是这些哈希文件干扰了IDE的文件索引、拖慢本地代码扫描速度:
直接把storage/framework/views目录加到IDE的排除扫描列表就好,框架本身对这个目录的读写、正常编译逻辑完全不会受影响。 - 如果是碰到了Blade编译异常,需要临时禁止缓存落盘排查问题(仅限短期调试,绝对不要在生产环境开):
打开config/view.php配置文件,把cache配置项指向一个不存在的临时空目录。此时框架因为找不到可写的缓存存储路径,会直接在内存里完成Blade语法编译,不会在磁盘上生成实体的哈希缓存文件。但这种方式的代价很明显:每次请求都要重新做全量Blade语法解析,性能会掉一大截,只适合临时排查编译类问题的时候短时间用。
补充提示:生产环境一定要保留默认的视图缓存机制。预编译后的视图能带来非常明显的渲染性能提升,上线后如果需要调整视图内容,只需要在上线流程里加一步执行
php artisan view:cache预编译全量视图即可,不需要额外调整目录权限或者改缓存逻辑。
内容的提问来源于stack exchange,提问作者Illyrian
相关产品推荐
相关产品推荐

