You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony6调用assets资源提示manifest.json缺失的解决方法

Symfony 6 静态资源引入报错及目录使用解答

报错根因

Symfony 6 默认启用了 Webpack Encore 配套的资产映射规则,Twig 中的assets()函数默认会读取public/build/manifest.json文件做静态资源路径版本化映射,如果你没有运行前端构建命令生成该文件,就会抛出对应异常。


1. manifest.json 缺失报错修复

根据你是否使用 Webpack Encore 管理前端资源,二选一操作即可:

  • 不使用 Encore、手动管理静态资源
    打开配置文件config/packages/assets.yaml,删除或注释掉默认的 manifest 路径配置:
    framework:
        assets:
            # 注释掉下方默认配置即可关闭manifest文件校验
            # json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
    
    执行命令清除项目缓存:php bin/console cache:clear,刷新页面后assets()函数会直接拼接相对于public目录的资源路径,不再查找manifest文件。
  • 计划使用 Encore 管理编译类前端资源(如Sass、自定义JS、前端依赖构建)
    直接执行以下命令安装依赖并完成首次构建:
    composer require symfony/webpack-encore-bundle
    npm install
    npm run build
    
    构建完成后public/build/manifest.json会自动生成,报错自动消除。

2. 根目录assets文件夹的使用规则

Symfony 6 根目录下自带的assets文件夹是 Webpack Encore 的前端源文件目录,不是公开可访问的静态资源目录,使用规则如下:

  • 该目录存放需要编译处理的原始前端文件:比如未压缩的自定义JS、SCSS文件、需要合并压缩的前端素材等,执行npm run build时,Encore 会自动将编译、压缩后的生产版本文件输出到public/build/目录下,前端模板中通过{{ assets('build/文件名') }}的方式引用即可。
  • 如果你手动管理静态资源、不经过 Encore 编译(比如你当前使用的已经是压缩好的bootstrap.min.css、现成的图片/字体文件等生产可用资源),直接放在public/目录下的自定义子目录即可,你之前创建的public/assets/目录完全可以正常使用,只要assets()函数内填写的路径相对于public目录正确就能正常加载。
  • 不要将不需要编译的公开静态资源放到根目录的assets文件夹中,该目录不在Web服务器的公开访问路径下,用户无法直接请求到该目录下的文件。

内容的提问来源于stack exchange,提问作者Johan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:21:45