Buffalo项目首次运行必须同时执行go mod tidy和npm install:前者补全Go子依赖(如pop/v6驱动)并写入go.sum,后者安装Webpack所需node_modules;任一缺失都会导致buffalo dev启动失败。

Buffalo项目首次运行前,go mod tidy 和 npm install 两步缺一不可,跳过任一环节都会导致 buffalo dev 启动失败——不是找不到models,就是卡在Webpack构建阶段。
为什么必须同时执行 Go 和 Node.js 依赖安装
Buffalo 是双栈结构:后端用 Go,前端资产(CSS/JS)默认走 Webpack 构建。即使你删掉 assets/ 目录,buffalo dev 启动时仍会尝试调用 webpack 命令,而该命令依赖 node_modules 存在。Go 侧同理:go.mod 里只声明顶层依赖,子依赖(比如 github.com/gobuffalo/pop/v6 的驱动)需 go mod tidy 显式拉取,否则迁移或数据库操作直接 panic。
-
go mod tidy会补全所有 transitive 依赖,并写入go.sum校验和 -
npm install或yarn install必须在assets/目录下执行(不是项目根目录) - 若项目生成时用了
--api,assets/目录不存在,可跳过 Node.js 安装,但需确认app.go中已移除assets.Pipeline()调用
加速依赖安装的实操建议
国内用户常卡在 npm install 和 go mod download 上,尤其 golang.org/x/... 包。关键不是换镜像源,而是分层处理:
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
- Go 依赖:确保
GOPROXY已设为https://goproxy.cn,direct(推荐),执行go env -w GOPROXY=https://goproxy.cn,direct - Node.js 依赖:优先用
yarn替代npm,进assets/后执行:yarn config set registry https://registry.npm.taobao.org,再运行yarn install --frozen-lockfile --network-concurrency 16 - 避免
go get手动拉包:Buffalo 项目应严格通过go mod tidy管理,手动go get可能引入版本冲突
常见错误现象与定位方式
依赖没装全的表现很具体,别猜,直接看终端输出:
-
buffalo dev启动时报cannot find package "github.com/gobuffalo/pop/v6"→ 漏了go mod tidy - 报错
sh: webpack: command not found或Cannot find module 'webpack'→npm install没在assets/下执行,或node_modules权限异常 - 访问页面时 panic 提示
template: index.html: no such template→go mod tidy成功但templates/被误删,或actions/render.go里TemplatesBox初始化失败(常因github.com/gobuffalo/plush版本不匹配)
最容易被忽略的是:Buffalo 不会自动帮你检查 go.mod 是否完整。它只在真正用到某个包时才报错,所以看似启动成功,一碰数据库或模板就崩。务必在 buffalo dev 前,先跑通 go build ./... 和 cd assets && npm run build 这两个验证步骤。

















