buffalo框架安装前必须确认go版本≥1.19、内网可访问go proxy或已配置离线vendor、项目是否需要前端构建以决定是否跳过yarn/npm。

Buffalo框架安装前必须确认的三件事
Buffalo 是 Go 语言写的全栈 Web 框架,它本身不依赖 Node.js,但默认生成的前端资产(assets)目录下含 package.json,会触发 yarn 或 npm 安装。内网环境没外网时,这步必卡死——不是 Buffalo 本身装不上,而是前端依赖拉不下来。
所以先确认:
-
go已安装且版本 ≥ 1.19(go version可查) - 内网机器能访问公司内部的 Go proxy(如
https://goproxy.your-company.com),或已配置GOPROXY=direct+ 离线vendor目录 - 若项目含
assets/目录,确认是否真需要前端构建:纯 API 服务可直接删掉该目录,跳过 yarn/npm 步骤
离线安装 Buffalo CLI 的可靠方式
官方推荐用 curl 下载二进制,但内网无法直连 GitHub。更稳的做法是提前在有网机器下载对应平台的 release:
比如 Linux x64:curl -L https://github.com/gobuffalo/buffalo/releases/download/v0.18.20/buffalo_0.18.20_Linux_x86_64.tar.gz -o buffalo.tar.gz
解压后把 buffalo 二进制拷进内网机器的 /usr/local/bin,并加执行权限:chmod +x /usr/local/bin/buffalo
验证:buffalo version 应输出版本号,而非 “command not found”。
⚠️ 注意:buffalo new myapp 默认会尝试 yarn install,此时必须加 --skip-yarn 参数,否则卡住:
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
buffalo new myapp --api --skip-yarn
内网运行时如何绕过前端构建环节
Buffalo 的 dev server(buffalo dev)默认监听 localhost:3000,但会自动尝试编译 assets。内网无 yarn 时,两个关键动作要改:
- 删掉或重命名
assets/目录(如果不需要前端页面) - 修改
app.go中的env.IsDev()分支,注释掉packr2.New(...)和http.FileServer对public/的挂载逻辑 - 确保
actions/render.go里没调用r.HTML渲染模板(否则会找templates/下文件,而这些文件通常由前端构建流程生成)
最简 API 服务可只留 actions/api.go,用 c.JSON 直接返回数据,完全避开 assets 流程。
Go module 依赖在内网怎么拉得动
Buffalo 项目本质是 Go module 项目,go build 或 buffalo dev 都会触发 go mod download。内网没代理时,常见报错是:go: github.com/gobuffalo/buffalo@v0.18.20: Get "https://proxy.golang.org/...": dial tcp: lookup proxy.golang.org: no such host
解决方法只有两个实际可行的:
- 用
go mod vendor在有网机器打包依赖到vendor/目录,再把整个项目(含 vendor)拷进内网,然后加环境变量:GOFLAGS="-mod=vendor" - 若公司有私有 Go proxy,设为:
export GOPROXY=https://goproxy.your-company.com,direct
并确保该地址在内网 DNS 可解析、端口可达
别试 replace 语句硬指定本地路径——Buffalo 依赖链深,手动 replace 几十个模块不现实,且易漏。
真正卡住人的从来不是 Buffalo 命令本身,而是它背后那一整套 Go + Node.js 的双生态假设。内网部署时,必须明确砍掉哪一环:要么彻底不要前端,要么把所有二进制和 module 提前“烘焙”好再进去。










