Dub 本地开发环境如何按推荐 Node v23.11.0 与 pnpm 9.15.9 版本搭建并跑通构建
2026/9/13 19:55:33 网站建设 项目流程

Dub 本地开发环境如何按推荐 Node v23.11.0 与 pnpm 9.15.9 版本搭建并跑通构建

【免费下载链接】dubThe modern link attribution platform. Loved by world-class marketing teams like Framer, Perplexity, Superhuman, Twilio, Buffer and more.项目地址: https://gitcode.com/GitHub_Trending/du/dub

Dub 是一个基于 Next.js 与 Turborepo monorepo 的开源链接归因平台,本地跑通它之前最常见的两个坑是依赖版本不对和 Prisma 数据库状态没同步。官方 README.md 在 Contributing 一节明确给出了推荐版本:Nodev23.11.0、pnpm9.15.9,并且根目录 package.json 中通过"packageManager": "pnpm@9.15.9"固定了 pnpm 版本。本文按这两个版本走一遍从安装依赖、同步数据库到pnpm build跑通构建的完整路径,适合刚 clone 仓库、准备贡献代码或做本地验证的开发者。

环境准备:固定 Node 与 pnpm 版本

先确认本机版本与推荐值一致:

node -v pnpm -v

预期分别输出v23.11.09.15.9。如果 pnpm 版本不匹配,可以直接借助 packageManager 字段让工具链自动拉取对应版本:

corepack enable corepack prepare pnpm@9.15.9 --activate

版本不匹配不只是"可能变慢"的问题——README 把"本地构建不正确"明确归因为"检查 node 与 pnpm 版本是否与推荐版本一致",所以这一步是所有后续操作的判定基线。

安装依赖

在仓库根目录执行:

pnpm install

这是一个 pnpm workspace(见 pnpm-workspace.yaml,包含apps/*packages/*),依赖会按 turbo.json 声明的 pipeline 在构建时按^build依赖顺序串联。README 建议的本地工作流里,所有命令都从仓库根目录发起,构建入口就是根 package.json 中的"build": "turbo build"

同步数据库:prisma:push

Dub 的 Web 应用位于 apps/web,Prisma 命令都挂在它的 package.json 里,且都通过dotenv-flow -e .env读取环境变量:

  • prisma:generate:生成 Prisma Client,schema 目录为./prisma/schema
  • prisma:push:把 Prisma schema 状态直接推入数据库(不使用迁移文件)

README 列出的第一个常见问题就是The table <table-name> does not exist in the current database.,官方给出的处理方式是执行pnpm prisma:push。数据库本身是 MySQL(PlanetScale 协议),本地可以用仓库自带的 docker-compose.yml 起服务——该文件开头注释写明 "This is meant for local development only. Do not use this in production.",其中包含三个服务:

  • ps-mysqlmysql:8.0镜像,数据库名planetscale,映射3306端口
  • planetscale-proxy:PlanetScale HTTP 模拟器(ghcr.io/mattrobenolt/ps-http-sim:latest),监听3900端口
  • mailhog:本地邮件服务,占用1025(SMTP)与8025(Web 界面)端口

apps/web目录启动:

docker compose up -d

CI 中对应的连接方式可供参考(见 .github/workflows/playwright.yaml 的环境变量):DATABASE_URL: mysql://root:@localhost:3306/planetscalePLANETSCALE_DATABASE_URL: http://root:unused@localhost:3900/planetscale。把这两个值写进apps/web/.env后,执行:

cd apps/web pnpm prisma:push

如果构建或运行时还报table does not exist,再执行一次prisma:push即可,这是 README 给出的直接修复路径。

跑通构建

回到仓库根目录:

pnpm build

这条命令对应turbo build,会按 turbo.json 的 pipeline 先构建被依赖的 packages,再构建apps/web(其 build 脚本为pnpm prisma:generate && next build,见 apps/web/package.json)。CI 中构建 Web 应用的方式是pnpm turbo build --filter=web(.github/workflows/playwright.yaml),效果等价于只针对 Web 应用及其上游包构建。

构建成功的判定标准是命令正常退出、无报错输出;若本地构建不正确,按 README 的处理顺序处理:

  1. 确认nodepnpm版本与推荐值一致(v23.11.0 / 9.15.9);
  2. 删除appspackages目录下的所有node_modules.next.turbo目录——这是一次删除依赖与构建产物的操作,执行前确认这些目录里没有你本地改动过的文件;
  3. 重新pnpm install,再执行pnpm build

可选:写入开发种子数据

构建跑通后,如果要在本地页面里看到数据,README 提供了 Dev Seed Script,它会往数据库写入开发和测试用的数据:

cd apps/web pnpm run script dev/seed

这是基础模式,只追加数据、不删除已有数据。如果要在干净状态上重建数据,有截断模式的变体:

pnpm run script dev/seed --truncate

注意--truncate会先删除数据库中全部现有数据,脚本在删除前会要求你输入确认。只用于本地开发库,不要指向任何含真实数据的库。

已知问题对照

现象README 给出的处理
The table <table-name> does not exist in the current database.执行pnpm prisma:push,把 Prisma schema 推入数据库
本地构建不正确核对 Node v23.11.0 与 pnpm 9.15.9;清理appspackages下的node_modules.next.turbo后重新pnpm install+pnpm build

另外说明一点版本口径:仓库 CI 工作流(.github/workflows/playwright.yaml、.github/workflows/e2e.yaml)目前统一使用 Node 20 跑测试,而 README 面向贡献者的本地推荐版本是 Node v23.11.0。两处口径不同,本地开发按 README 的推荐版本执行即可,本文不自行合并这两个值。

至此,版本对齐、依赖安装、schema 推送与pnpm build全部走通,本地开发环境即按推荐配置就绪。

【免费下载链接】dubThe modern link attribution platform. Loved by world-class marketing teams like Framer, Perplexity, Superhuman, Twilio, Buffer and more.项目地址: https://gitcode.com/GitHub_Trending/du/dub

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询