Buffalo框架不支持CLI参数指定HTTP端口,端口由PORT环境变量控制,dev模式默认3000,build后二进制运行时PORT优先级高于config/buffalo-app.toml中的port配置,且webpack-dev-server默认占3001端口无环境变量开关。

Buffalo 框架不支持通过命令行参数直接指定自定义 HTTP 监听端口 —— 这是常见误解的源头。它和 Gin、Echo 等轻量级框架不同,Buffalo 是一个全栈式 Web 应用生成器(含前端构建、数据库迁移、资源路由等),其开发服务器启动逻辑封装在二进制命令中,**端口由环境变量或配置文件控制,而非 CLI 参数**。
buffalo dev 默认监听 3000 端口,改端口必须改环境变量
buffalo dev 启动时会读取 PORT 环境变量;若未设置,则 fallback 到 3000。它不会解析类似 --port 8080 或 -p 8080 的参数(这些参数会被忽略)。
实操建议:
- Linux/macOS:运行
PORT=8080 buffalo dev - Windows(PowerShell):运行
$env:PORT="8080"; buffalo dev - Windows(CMD):运行
set PORT=8080 && buffalo dev
config/buffalo-app.toml 中的 port 配置项无效于开发服务器
很多人误以为修改 config/buffalo-app.toml 里的 port 字段能生效,但该字段仅影响 buffalo build 后生成的二进制在生产环境运行时的默认端口(且仍可被 PORT 环境变量覆盖)。buffalo dev 完全忽略此配置。
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
验证方式:改了 toml 但没设 PORT,运行 buffalo dev 仍看到 Starting application at http://127.0.0.1:3000。
使用 buffalo build 后的二进制时,PORT 环境变量优先级高于硬编码
执行 buffalo build -o myapp 生成可执行文件后,运行它时:
-
PORT=8080 ./myapp→ 监听 8080 -
./myapp→ 若 toml 中设了port = 4000,则监听 4000 -
PORT=9000 ./myapp→ 即使 toml 写的是 4000,也监听 9000
注意:buffalo build 不会把 toml 中的 port 值编译进二进制,而是运行时动态读取 —— 所以部署时务必确保 PORT 环境变量已正确注入(例如 Docker 的 -e PORT=8080)。
dev 模式还会启动一个 webpack-dev-server(前端热更新服务),它默认监听 3001,且**没有暴露环境变量开关**。如果 3001 被占,你会看到前端资源加载失败,但后端仍正常 —— 此时需手动改 webpack.config.js 中的 devServer.port。

















