buffalo new仅支持创建时通过CLI标志控制结构:--api生成纯API项目,--skip-yarn/--skip-npm跳过前端依赖,--vcs=none禁用Git初始化;所有参数均为静态开关,项目生成后不可修改。

buffalo new 命令不支持运行时动态设置项目参数,所有“参数”实为初始化时的 CLI 标志,必须在创建项目前明确指定,否则无法通过后续命令修改。
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
buffalo new 的关键标志只有三个真正影响项目结构
它不是配置工具,而是项目脚手架;所谓“设置参数”,本质是控制生成内容的开关:
-
--api:跳过前端资产(assets/、templates/、Webpack 配置),禁用render中间件,适合纯后端服务 -
--skip-yarn或--skip-npm:不生成package.json和前端构建逻辑,避免 CI 中因 Node.js 缺失而失败 -
--vcs=none:不初始化 Git 仓库,防止与已有仓库冲突或误提交
buffalo dev 不读取任何“项目参数”,只依赖代码和环境变量
你不会在 buffalo dev 启动日志里看到“已加载参数 X”,因为它根本不解析或传递这类概念:
- 数据库连接由
models.DB初始化决定,优先读DB_URL环境变量,其次 fallback 到config/database.yml - 应用模式(development/test/production)由
BUFFALO_ENV环境变量控制,不是buffalo命令参数 - 中间件启用状态(如 CSRF、Session)写死在
actions/app.go里,改代码才生效,不是靠命令开关
buffalo g 系列命令的“参数”是模板占位符,不是运行时配置
比如 buffalo g model User name:string email:string,这里的 name:string 是字段定义语法,不是传给框架的配置项:
- 它被解析成 Go 结构体字段 + Pop 迁移语句,生成后即固化,后续无法用命令更新字段类型
- 字段标签(如
form、json)需手动加到生成的 struct 上,CLI 不自动注入 -
buffalo g migration生成的是空迁移文件,SQL 内容全靠手写,无参数可设
真正需要“参数化”的地方,得靠环境变量或代码硬编码
Buffalo 没有类似 rails server --port=4000 的运行时选项:
- 端口固定由
PORT环境变量控制(默认3000),buffalo dev不接受--port参数 - 日志级别无法用命令调整,得改
app.Use(logger.New())的构造参数 - 如果你希望不同环境用不同数据库配置,别指望
buffalo new --env=staging—— 直接写export DATABASE_URL=...再启动
buffalo task 是唯一接近“带参命令”的机制,但参数仍需手动解析
自定义任务函数接收的是 buffalo.Context,其查询参数来自 HTTP 请求,而非 CLI:
- 要传参,得用
curl "<a href="https://www.php.cn/link/9c4b855675d2a511c06fc3b54ed18dd6">https://www.php.cn/link/9c4b855675d2a511c06fc3b54ed18dd6</a>" - 或在 CLI 调用时伪造 context:
buffalo task import --flag=file=data.csv(需自己实现 flag 解析) - Buffalo 自身不提供
--dry-run、--batch-size这类通用参数支持
别把 buffalo 当配置中心——它只是个代码生成器和轻量启动封装。所有“参数”最终都落在环境变量、YAML 文件或 Go 源码里,且多数在项目生成后就该冻结。最常被忽略的点是:你改了 database.yml,却忘了 DB_URL 环境变量优先级更高,结果配置始终不生效。

















