☰
Supabase CLI 实战:本地跑通数据库、函数和类型生成的完整链路
2026/10/21 1:24:31 网站建设 项目流程

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 supabase

macOS 和 Linux 也可以用 Homebrew(brew install supabase/tap/supabase),Windows 上可以用 Scoop(scoop install supabase)。装完用supabase --version确认输出版本号即可。

初始化工作区并启动本地服务栈

在空目录里执行初始化,会生成supabase/config.toml,这个文件描述本地项目的全部配置:

supabase init supabase start

start会拉起 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 reset

db 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 push

login需要个人访问令牌,凭证会存进系统钥匙串(不可用时写到本地配置文件)。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),仅供参考

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

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

立即咨询