buffalo new生成的结构非开箱即用,必须立即删减:①assets/目录(防build卡住)、②templates/中除layout.html和错误页外的HTML文件(防plush初始化拖慢启动)、③public/中未引用的占位文件(减体积);同时检查go.mod移除plush和packr2,并精简app.go中间件。

直接用 buffalo new 生成的结构不是开箱即用的开发基础结构——它混着生产无关逻辑、冗余依赖和默认模板,不清理就进不了真实迭代流程。
buffalo new 后必须立刻删减的三类文件
刚执行完 buffalo new myapp,别急着写业务。先人工确认并处理以下内容:
-
assets/目录:纯 API 项目必须删除,否则buffalo build会卡在 webpack 编译;保留也得清空webpack.config.js和package.json中所有非必要插件 -
templates/下除layout.html和错误页外的所有 HTML 文件:Buffalo 的模板机制默认启用,但你若只返回 JSON,这些文件不仅无用,还会触发 plush 渲染器初始化,拖慢启动 -
public/里没被引用的占位文件(如favicon.ico、robots.txt):它们会被 packr2 打包进二进制,增大体积且无实际用途
go.mod 里要检查的两个关键依赖
Buffalo 5.x 默认引入了大量开发向依赖,而这些在 CI/CD 或容器构建中常引发冲突:
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
- 确认没有
github.com/gobuffalo/plush:这是模板引擎,纯 API 服务不需要;如果误留,buffalo dev启动时会尝试加载templates/,报错template: "layout.html" is undefined - 确认没有
github.com/gobuffalo/packr/v2:除非你真要打包静态资源,否则删掉;它会让构建阶段多出packrd.go,且与GOOS=linux交叉编译不兼容
app.go 初始化阶段的最小可信配置
默认生成的 app.go 包含一堆中间件,但多数对 API 开发无意义,反而掩盖问题:
- 注释掉或删除
app.Use(plugins.Static()):API 不该暴露/public/路径,否则健康检查可能误命中 404 - 把
app.Use(plugins.Favicon())换成显式路由:app.GET("/favicon.ico", func(c buffalo.Context) error { return c.Render(204, nil) }),避免中间件链干扰 - 确保
app.Use(middleware.ParameterLogger)在最前:日志是调试唯一依据,放错位置会导致请求体丢失
为什么 templates/layout.html 必须保留
即使你只写 JSON 接口,templates/layout.html 也不能删——Buffalo 的 r.Auto() 和错误渲染(如 404、500)默认依赖它。删了会导致:
-
c.Error(404, errors.New("not found"))返回空响应体,而不是标准 JSON 错误格式 -
r.JSON()在 panic 捕获路径中 fallback 到 HTML 渲染,结果输出乱码 HTML - 测试时
buffalo test报错no layout template found,中断 CI 流程
真正该做的是把 layout.html 精简为仅含 {{ yield }} 的空壳,不加任何 HTML 标签或变量引用——它只是个占位符,不是展示层。

















