Supabase CLI 实战:本地跑通数据库、函数和类型生成的完整链路
【免费下载链接】cliSupabase CLI. Manage postgres migrations, run Supabase locally, deploy edge functions. Postgres backups. Generating types from your database schema.项目地址: https://gitcode.com/GitHub_Trending/cli23/cli
Supabase CLI 把 Supabase 平台的能力搬进终端:在你自己的机器上启动完整的本地服务栈(Postgres、Auth、Realtime、Storage 与 Edge Functions),管理数据库迁移,部署边缘函数,并根据表结构生成 TypeScript 类型。对想在本地写完代码再推送云端的开发者来说,它就是连接本地工程与远程项目的那座桥。
什么情况下值得用 Supabase CLI
- 你希望在没有连网控制台的情况下调试数据库变更,先在本地验证迁移再上线。
- 你需要把同一个工作区里的数据库、函数、密钥管理起来,而不是各写各的脚本。
- 你在维护一个 TypeScript 项目,希望数据库表结构变化时,客户端类型能跟着自动更新。
- 多人协作时,希望本地环境与线上项目通过
supabase link关联后保持一致。
安装前检查依赖
本地栈依赖容器运行时,先确认两点:
- Docker Engine 已安装并能正常运行(
docker ps不报错)。 - 机器至少 7GB 可用内存——启动全部服务时官方给出的建议值。
包管理方式任选其一,npm 最为通用:
npm install -D supabasemacOS 和 Linux 也可以用 Homebrew(brew install supabase/tap/supabase),Windows 上可以用 Scoop(scoop install supabase)。装完用supabase --version确认输出版本号即可。
初始化工作区并启动本地服务栈
在空目录里执行初始化,会生成supabase/config.toml,这个文件描述本地项目的全部配置:
supabase init supabase startstart会拉起 Postgres、Auth、Realtime、Storage、Edge Functions 等容器,并自动做健康检查。不想启动某些服务时,可以用-x排除,比如-x gotrue,imgproxy。启动完成后,运行supabase status查看各项服务的状态。
如果项目已经有supabase目录结构,想看它到底生成了什么,直接翻目录即可:config.toml之外,migrations、functions、tests等目录都挂在supabase/下。
想从零脚手架一个带模板的项目,还可以直接跑supabase bootstrap,它会替你搭好工作区骨架。
用迁移管理一张用户表
建表这件事,建议走迁移文件而不是手工连库执行 SQL。以创建profiles表为例:
supabase migration new create_profiles在supabase/migrations/下生成的 SQL 文件中写入建表语句,并顺手打开行级安全:
create table public.profiles ( id uuid references auth.users primary key, full_name text, created_at timestamptz default now() ); alter table public.profiles enable row level security;然后让本地库跟上迁移:
supabase db resetdb reset会重建本地库并按序应用所有迁移和种子文件。迁移写好后想对比本地与目标的差异,用supabase db diff;确认无误再推送(supabase db push)。日常排查时,supabase db --help能列出该子命令下所有可用的操作。
创建、测试并部署一个 Edge Function
函数是 TypeScript 写的无服务器代码,运行在 Deno 兼容的边缘运行时上,冷启动快、无需包管理。以hello-world为例:
supabase functions new hello-world这会生成函数目录和入口文件。本地跑起来看看响应是否符合预期:
supabase functions serve hello-world终端会输出本地访问地址,用 curl 打一下确认能拿到 JSON 响应。测试通过后部署到远端:
supabase functions deploy hello-world如果函数需要环境变量,部署时可以用--env-file指向一个.env文件,避免把密钥硬编码进代码。
让类型跟着数据库走
表结构一变,客户端类型就过期,这是最常见的隐性成本。Supabase CLI 可以直接从库结构反向生成类型:
supabase gen types --local > database.types.ts--local从本地库读取结构,--linked则从关联的远程项目读取。把生成的文件提交进仓库,supabase-js客户端就能基于它做完整的类型检查。
关联远程项目并推送变更
本地开发收敛后,把改动带上线分三步:
supabase login supabase link --project-ref <你的项目ref> supabase db pushlogin需要个人访问令牌,凭证会存进系统钥匙串(不可用时写到本地配置文件)。CI 环境里可以跳过登录,直接用SUPABASE_ACCESS_TOKEN环境变量注入。link之后,push、gen types --linked这类命令就知道该操作哪个项目。函数部署同理,走supabase functions deploy即可。
常见卡点排查
supabase start卡住或超时:首次运行要拉取多个镜像,耐心等待;若健康检查失败,先看 Docker 是否正常运行,必要时supabase stop后重试,也可临时用--ignore-health-check跳过检查排查。- 内存不足导致容器反复重启:全部服务对内存不友好,用
-x排除掉你暂时用不到的服务(如imgproxy)能明显缓解。 db reset后数据全没了:这是预期行为——它会重建本地库。想保留某些数据,先supabase db dump导出,再重置后导入回去。- 找不到项目 ref 或权限不足:ref 在控制台的项目设置页可以复制;令牌权限不够时回到账户的令牌管理页重新生成。
- 不知道某条命令有哪些参数:任何子命令加
--help都能列出参数与示例,比如supabase functions deploy --help。
接下来可以看什么
仓库内的文档目录值得一读:apps/cli/docs/下按子命令拆分了start.md、status.md、functions.md等说明,能覆盖命令行手册里的大部分细节。想深入本地栈的架构,可以参考packages/stack的源码和packages/config中关于配置 schema 的定义。把init → start → migration → functions deploy → gen types这条链路跑通之后,剩下的就是按你项目的节奏迭代了。
【免费下载链接】cliSupabase CLI. Manage postgres migrations, run Supabase locally, deploy edge functions. Postgres backups. Generating types from your database schema.项目地址: https://gitcode.com/GitHub_Trending/cli23/cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考