Buffalo CLI非即装即用,必须严格按顺序执行go mod tidy、npm install、buffalo db create && migrate三步补全,且buffalo new须在空目录无go.mod下运行。

Buffalo 的 CLI 命令不是“即装即用”的黑盒,它高度依赖项目结构、Go 环境和上下文加载顺序;跳过 buffalo new 后的三步补全(go mod tidy、npm install、buffalo db create && migrate),几乎所有后续命令都会失败或静默降级。
buffalo new 必须在空目录且无 go.mod 下运行
这是最常卡住新手的第一步。Buffalo 不会覆盖已有模块,也不处理冲突路径。
- 错误现象:
buffalo new myapp直接退出并报directory is not empty或failed to detect module path - 正确做法:先
mkdir myapp && cd myapp,再执行命令;若已有go.mod,必须删掉或换目录 -
--api参数只影响前端相关文件生成(跳过assets/、Webpack 配置等),但不会改变模型、数据库或路由机制 - 生成后立即检查
actions/app.go是否存在——这是所有中间件和路由注册的唯一入口,缺失说明生成失败
自定义 CLI 命令只能加在项目内 buffalo/cmd/
Buffalo 没有插件市场,也没有 buffalo plugin install;所谓“扩展命令”,本质是向 Cobra 根命令注入子命令,仅支持项目内硬编码。
- 手动创建目录:
mkdir -p buffalo/cmd,然后在buffalo/cmd/root.go中定义新命令(如resetMigrateCmd) - 必须在
init()函数里调用rootCmd.AddCommand(...),否则buffalo migrate:reset不会出现 - 别试图用 shell alias 或独立二进制伪装成 Buffalo 命令——它拿不到
app.Pop、不识别database.yml、buffalo build也不会打包进去 - 如果逻辑跨项目复用,优先做成独立 CLI 工具(如
myapp-migrator),而非塞进 Buffalo 子命令链
buffalo dev 启动前必须完成三件事
这三步不是可选优化,而是启动校验硬门槛。缺任何一项,buffalo dev 要么 panic,要么卡在 “Starting application…” 不返回 HTTP 服务。
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
-
go mod tidy:补全pop/v6、plush等子依赖,否则buffalo db migrate会因类型未定义直接崩溃 -
npm install(或yarn install):即使你打算删assets/,首次也必须装,因为buffalo dev默认启动 Webpack watcher,找不到node_modules就中断 -
buffalo db create && buffalo db migrate:先建库再跑迁移,顺序不能反;否则models.NewDB()连接成功但查表失败,404 或 panic 都可能
buffalo routes 和 buffalo generate 的约定必须严格遵守
Buffalo 的路由不是靠手写 app.Get() 构建的,而是由资源命名、目录结构、方法名三者强绑定驱动的。违反任一约定,就会 404 且无提示。
-
buffalo g resource users name:string是唯一推荐方式——它自动创建模型、迁移、控制器、模板路径,并注册进路由表 - 控制器方法名只能是
List、Show、Create、Update、Destroy,拼错一个字母(如Index)就匹配失败 - 路径前缀默认是复数小写(
/users),不能靠改文件名或包名修改;要定制就得用--skip-template手动控制,再补app.Get() -
buffalo routes输出里看不到 handler?大概率是actions/app.go漏了app.Resource("/users", &UsersResource{})
真正容易被忽略的是:所有 CLI 命令的行为都取决于当前工作目录是否为项目根(含 actions/、models/)、go.mod 是否已初始化、以及 buffalo/cmd/root.go 是否被正确引用——它们共同构成 Buffalo 的上下文边界,越界操作基本等于无效指令。










