前端秒变全栈:Vue3 + Supabase 三小时交付完整应用,后端一行不写
前端秒变全栈Vue3 Supabase 三小时交付完整应用后端一行不写【免费下载链接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.项目地址: https://gitcode.com/GitHub_Trending/supa/supabase我只写前端后端怎么办这是无数 Vue 开发者在个人项目、独立出海、内部工具、黑客松 Demo 上反复撞见的墙。传统方案要么引入 Node 服务端把工程复杂度翻倍要么使用云函数把逻辑拆得七零八落要么退回 Firebase 接受锁死生态和 SQL 能力阉割。Supabase 给出的答案是另一条路让 PostgreSQL 自己成为后端。它把数据库、REST API、实时订阅、认证、对象存储和边缘函数打包成一套开箱即用的 BaaS前端只要装一个 JS SDK 就能拿到完整的后端能力。这个定位让它在 2025–2026 年踩中了风口——社区讨论中它被称作Vibe Coding 的默认后端估值已突破百亿美元还以 1.5 亿美元融资收购了数据库公司 Turso把目光投向AI 智能体需要数百万个独立数据库的下一程。本文不再复述营销话术而是直接打开 Supabase 官方仓库supabase/supabase中真实的 Vue 3 示例代码从项目初始化、数据库表设计、认证、CRUD、文件存储到本地联调与上线部署把三小时交付完整应用的完整链路拆给你看并交代每一环背后为什么能这么省的机制原理。一张表就是一套 APIBaaS 的底气从哪来先看仓库里最核心的示例examples/user-management/vue3-user-management。这是一个官方维护的完整 Vue 3 用户管理应用功能清单极其克制却覆盖了全栈应用的三大命脉通过 Magic Link邮箱魔法链接登录无需密码读取、更新用户档案数据数据库 CRUD上传、回显头像图片对象存储。整个项目的前端依赖只有两个见 package.jsondependencies: { supabase/supabase-js: ^2, vue: ^3.5.30 }没有 Express、没有 ORM、没有鉴权中间件。后端能力的秘密藏在架构里Supabase 在 PostgreSQL 之上叠了一层PostgREST——一个把数据库表直接暴露为 RESTful API 的网关。你在数据库里建一张表PostgREST 就自动生成GET/POST/PATCH/DELETE端点你在表上定义行级安全RLS策略这个 API 就自带权限语义。前端拿到的supabase.from(profiles).select(...)这样的链式调用底层打的正是这些自动生成的 HTTP 接口。这也解释了为什么仓库的 Docker 自托管编排docker/docker-compose.yml里躺着十来个相互咬合的服务Studio 控制台、基于 Envoy 的 API 网关api-gw、负责 JWT 认证的authGoTrue、把 Postgres 变成 REST API 的 PostgREST、负责 WebSocket 广播的 Realtime、对象存储 Storage、连接池 Supavisor 等等。开发者感知到的一个 BaaS其实是一套企业级开源组件堆叠出的平台——这也是它与 Firebase 最本质的区别底层是标准 SQL 和你能完全掌控的 Postgres。第一步脚手架、环境变量与数据库表设计按官方 Quickstartapps/docs/content/guides/getting-started/quickstarts/vue.mdx的流程从零初始化一个 Vue 应用只需三行命令npm create vitelatest supabase-vue-3 -- --template vue cd supabase-vue-3 npm install supabase/supabase-js然后把项目 URL 与 publishable key 写入.env参考示例中的 .env.exampleVITE_SUPABASE_URLhttps://your-project-ref.supabase.co VITE_SUPABASE_PUBLISHABLE_KEYyour-publishable-key初始化客户端的代码全项目只有五行的量级见 src/supabase.jsimport { createClient } from supabase/supabase-js const supabaseUrl import.meta.env.VITE_SUPABASE_URL const supabasePublishableKey import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY export const supabase createClient(supabaseUrl, supabasePublishableKey)值得注意这两个变量会暴露在浏览器里官方文档对此的注释是这没问题因为数据库开启了行级安全RLS。这句话是整篇文章的安全主线后面会展开。接下来是整条链路里唯一一次写后端的环节——但用的不是编程语言而是 SQL。示例 READMEREADME.md给出了完整的建表脚本核心是一张profiles表create table profiles ( id uuid references auth.users not null, updated_at timestamp with time zone, username text unique, avatar_url text, website text, primary key (id), unique(username), constraint username_length check (char_length(username) 3) );三个细节值得工程师品一品主键直接引用auth.usersid是 UUID 且外键指向 Supabase 内置的认证用户表登录用户与业务数据的绑定关系由数据库约束兜底约束写在数据库里username唯一、长度不小于 3这类校验不需要前端或中间层重复实现任何绕过 UI 的请求都在数据库层被拦截表结构即 API 契约建完表PostgREST 立即暴露对应的 REST 端点select、insert、update全部可用——这就是后端一行不写的字面含义。建表动作既可以在云端的 SQL Editor 里执行也可以在本地supabase migration new生成的迁移文件中维护后者让表结构像前端代码一样进入版本管理。认证打通Magic Link 登录与登录态管理认证是新手最容易写崩的部分密码哈希、会话令牌、过期刷新、安全 Cookie……Supabase Auth 把这些全部内置。示例使用邮箱魔法链接前端交互代码只有Auth.vue一个组件src/components/Auth.vueconst handleLogin async () { try { loading.value true const { error } await supabase.auth.signInWithOtp({ email: email.value }) if (error) throw error alert(Check your email for the login link!) } catch (error) { if (error instanceof Error) { alert(error.message) } } finally { loading.value false } }用户提交邮箱后Auth 服务签发一次性链接发送到邮箱点击即完成登录。而当前是否已登录的全局状态由 src/App.vue 监听维护onMounted(() { supabase.auth.getClaims().then(({ data }) { claims.value data.claims }) supabase.auth.onAuthStateChange(async () { const { data } await supabase.auth.getClaims() claims.value data.claims }) })Account v-ifclaims :claimsclaims / Auth v-else /getClaims()读取 JWT 中的声明onAuthStateChange订阅登录/登出事件——登录态在页面刷新、跨标签页、Token 过期等场景下都由 SDK 自动维护。需要社交登录时官方仓库还提供了 GitHub OAuth 的完整配置流程社区文章对此也有大量实践原理一致在 GitHub 侧创建 OAuth App把回调地址填进 Supabase 控制台前端一行signInWithOAuth即可。这里有一层值得 Vue 开发者留意的机制JWT 的sub声明用户 UUID与数据库 RLS 中的auth.uid()是同一枚 Token 的两种读取视角。前端从claims.sub拿用户 ID 去查询自己的档案数据库策略用auth.uid()校验请求归属——两端基于同一签名体系这就是无需后端代码却能完成身份鉴权的底层密码。CRUD 与安全底线RLS 是一切的根基登录之后档案的读取与更新落在 src/components/Account.vue两段代码分别是读和写let { data, error, status } await supabase .from(profiles) .select(username, website, avatar_url) .eq(id, claims.value.sub) .single()const updates { id: claims.value.sub, username: username.value, website: website.value, avatar_url: avatar_url.value, updated_at: new Date(), } let { error } await supabase.from(profiles).upsert(updates)select加.eq(id, ...)过滤、upsert一键插入或更新——标准的前端链式调用没有一行服务端逻辑。但真正决定谁能读、谁能写的是建表时跟着写下的那三条 RLS 策略alter table profiles enable row level security; create policy Public profiles are viewable by everyone. on profiles for select using ( true ); create policy Users can insert their own profile. on profiles for insert with check ( (select auth.uid()) id ); create policy Users can update own profile. on profiles for update using ( (select auth.uid()) id );语义一目了然档案公开可读只有auth.uid()等于记录id的用户本人能插入和更新自己的档案。RLS 是 Postgres 原生机制策略在数据库内部执行任何途径REST API、直接 SQL 连接、未来新增的客户端都无法绕过——这正是publishable key 可以安全暴露在浏览器里的前提。反过来忽略这一层就会付出真实代价2025 年 UpGuard 安全团队的研究发现全网有16,326 个 Supabase 项目暴露了公开可读取的数据库表其中不少包含个人数据TechCrunch 等媒体对此做了报道。这些项目的共性失误高度一致——建了表、接入了 SDK却忘了enable row level security和策略。把 RLS 当作可选的进阶功能是 BaaS 时代最危险的认知偏差在你写下create table之后的第一件事就应该是打开 RLS。文件存储三行代码搞定头像上传档案里还躺着一个avatar_url字段对应存储层的能力。头像上传组件 src/components/Avatar.vue 展示了 Storage 的完整闭环——上传与下载let { error: uploadError } await supabase.storage .from(avatars) .upload(filePath, file)const { data, error } await supabase.storage .from(avatars) .download(path.value) src.value URL.createObjectURL(data)上传用的是随机文件名下载后在浏览器侧URL.createObjectURL生成本地预览避免每次渲染都走一遍网络。桶Bucket的权限同样在 SQL 中声明insert into storage.buckets (id, name) values (avatars, avatars); create policy Avatar images are publicly accessible. on storage.objects for select using ( bucket_id avatars ); create policy Anyone can upload an avatar. on storage.objects for insert with check ( bucket_id avatars );Storage 对公众开放读头像需要公开访问、放行登录用户上传权限模型和数据库表完全一致地由策略驱动。更进阶的做法是把上传 URL 签名化、给对象加防盗链或接入 CDN 做边缘缓存——能力都在只是按需开启。至此认证、CRUD、文件存储三大件已经全部打通。把Auth、Account、Avatar三个组件组装进App.vuenpm run dev启动 Vite 开发服务器浏览器打开localhost:5173一个完整的用户管理应用就出现在眼前——这正是官方教程with-vue-3.mdx里At this stage you have a fully functional application!的由来。顺带一提这套用户管理脚手架在仓库里以九种技术栈平行存在——React、Svelte、Swift、Flutter、Angular、Ionic乃至 Solid 和 Nuxt——它们共享同一套数据库、同一份 RLS 策略、同一套 Storage 配置。后端能力与前端框架彻底解耦这是前端秒变全栈最有力的注脚你学的不是某个框架绑定的后端而是一套可复用的后端资产。从本地联调到上线部署两条路线都讲清楚应用写完了接下来是工程师最关心的最后一公里。Supabase 给了两条部署路线恰好对应不同的控制欲与运维成本。路线 A托管云默认路径。在控制台创建项目、执行建表 SQL、拿到 URL 和 key 之后前端npm run build产出静态资源部署到任意静态托管Vercel、Netlify、自有服务器即可。数据库、Auth、Storage 全部由平台托管自动备份、免运维。这也是三小时交付最顺滑的路径——本地开发与生产环境共享同一套 API除了环境变量不同代码路径完全一致。路线 B自托管Docker Compose。仓库根目录的 docker/ 提供了官方自托管编排。它把完整服务栈收进一份docker-compose.ymlStudio 控制台、Envoy API 网关、Auth、PostgREST、Realtime、Storage、Postgres 元数据管理、Postgres 本体、Edge Runtime、日志链路Logflare Vector和连接池 Supavisor。社区里的 Windows 部署与本地联调文章走的也是这条路——装好 Docker 与 Supabase CLIsupabase start即可拉起本地实例.env指向localhost完成联调。日常运维则被封装成脚本docker/run.shsh run.sh start # docker compose up -d --wait sh run.sh status # docker compose ps sh run.sh logs auth # 跟踪指定服务日志 sh run.sh secrets # 打印密钥与 API Key sh update.sh # 备份后升级整套服务自托管的代价在 docker/README.md 里被写得很直白——默认配置不安全不能直接上生产必须更换所有默认密码与密钥、复查 CORS 配置、在服务前方架设 HTTPS 反向代理、并建立备份机制。托管云替你承担了这部分运维风险自托管则把控制权与责任同时交还给你。对大多数个人项目和早期产品路线 A 是正确的默认选择对数据主权敏感或需要深度定制的场景路线 B 才是答案。三小时背后的工程真相复盘整条链路会发现三小时交付不是营销话术而是有清晰机制支撑的工程事实表即 APIPostgREST 把 DDL 变成 REST 端点省掉一整层路由与序列化代码数据库内嵌鉴权RLS 策略让权限逻辑沉淀在数据层任何客户端路径都无法绕过状态与会话由 SDK 接管onAuthStateChange、getClaims、Token 刷新都藏在supabase-js内部存储与数据库共用同一权限心智一条policy同时约束表和桶学习成本被压缩到最小。当然边界也要说清楚。BaaS 能覆盖的是标准的 CRUD 认证 存储形态当业务逻辑复杂到需要跨表事务编排、定时任务、第三方回调签名验证时就需要 Supabase Edge Functions基于 Deno 的云端函数或直接在数据库里写存储过程——这些依然是后端只是换了一种更贴近数据层的写法。RLS 是最后一道防线也意味着它必须成为第一道防线——那 1.6 万个裸奔的数据库就是给所有只写前端的开发者上的最贵一课。如果你正打算用 Vue 3 做一个带账号体系的完整应用不妨直接把examples/user-management/vue3-user-management拉下来跑一遍初始化、建表、魔法链接登录、档案 CRUD、头像上传再到npm run dev看到完整应用在 5173 端口跑起来——这条路径上的每一步仓库里都有真实可运行的代码等着你。剩下的三小时里你会发现自己省下的不是写后端的时间而是整整一类工程问题。【免费下载链接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.项目地址: https://gitcode.com/GitHub_Trending/supa/supabase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

如何逐文件审阅AI改代码:cc-haha Diff评审与内置浏览器预览完全指南

如何逐文件审阅AI改代码:cc-haha Diff评审与内置浏览器预览完全指南

人工智能AI 应用AI Agent代码智能体桌面应用开发工具GUI 自动化 【免费下载链接】cc-haha Local-first cross-platform desktop workspace for Claude Code / agents: multi-agent, Git worktrees, code diffs, skill marketplace, multi-model, Computer Use, task-aware desk…

2026/10/11 18:08:19 阅读更多 →
开源 Turbo 对阵闭源 Nano Banana:被 ViT 一作盛赞的中国开源模型有还手之力吗

开源 Turbo 对阵闭源 Nano Banana:被 ViT 一作盛赞的中国开源模型有还手之力吗

开源 Turbo 对阵闭源 Nano Banana:被 ViT 一作盛赞的中国开源模型有还手之力吗 【免费下载链接】Qwen-Image-2.1-Turbo 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen-Image-2.1-Turbo 闭源图像模型的每一次发布,几乎都会被冠以"…

2026/10/11 21:00:00 阅读更多 →
Visual Basic .NET 控制台编程入门实战:基于 learnxinyminutes-docs 的完整代码教程

Visual Basic .NET 控制台编程入门实战:基于 learnxinyminutes-docs 的完整代码教程

文档教程 【免费下载链接】learnxinyminutes-docs Code documentation written as code! How novel and totally my idea! 项目地址: https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs 点击查看 免费下载 本教程以仓库内 zh-cn/visualbasic.md 为核心蓝本…

2026/10/11 20:09:57 阅读更多 →

最新新闻

采矿CAD课程设计PPT:从软件操作到工程表达的全链路建模

采矿CAD课程设计PPT:从软件操作到工程表达的全链路建模

简介:本资源是一份面向高校采矿工程、地质环境与安全工程专业学生的《采矿CAD课程设计》教学课件,聚焦矿山地质环境治理与生态保护的CAD辅助设计实践。课件系统梳理了矿山地质环境定义、矿区生态破坏成因(含景观与生态双重破坏)、…

2026/10/12 0:54:26 阅读更多 →
桌面调度台 vs 云端 Agent 平台:Orca、美团 CatPaw、NVIDIA 路由器的三条路线谁先跑通

桌面调度台 vs 云端 Agent 平台:Orca、美团 CatPaw、NVIDIA 路由器的三条路线谁先跑通

桌面调度台 vs 云端 Agent 平台:Orca、美团 CatPaw、NVIDIA 路由器的三条路线谁先跑通 【免费下载链接】orca Orca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and …

2026/10/12 0:54:26 阅读更多 →
Kubernetes Python 客户端 V1beta2ResourceClaim 模型详解:Dynamic Resource Allocation 资源声明的完整 API 参考

Kubernetes Python 客户端 V1beta2ResourceClaim 模型详解:Dynamic Resource Allocation 资源声明的完整 API 参考

后端云原生容器编排 【免费下载链接】python Official Python client library for kubernetes 项目地址: https://gitcode.com/gh_mirrors/python1/python 点击查看 免费下载 导读 本文面向使用官方 Kubernetes Python 客户端(本项目仓库 gh_mirrors/p…

2026/10/12 0:54:26 阅读更多 →
CodeIgniter 4 Request 类详解:HTTP 请求的面向对象封装与全局数据安全访问

CodeIgniter 4 Request 类详解:HTTP 请求的面向对象封装与全局数据安全访问

后端Web框架 【免费下载链接】CodeIgniter4 Open Source PHP Framework (originally from EllisLab) 项目地址: https://gitcode.com/gh_mirrors/co/CodeIgniter4 点击查看 免费下载 本指南以 CodeIgniter 4 官方用户指南 request.rst 为主体,系统讲解框…

2026/10/12 0:54:26 阅读更多 →
Vibe Coding 的边界:从“70% 问题“到“80% 墙“,AI 编程五大局限性与人机分工深度解析

Vibe Coding 的边界:从“70% 问题“到“80% 墙“,AI 编程五大局限性与人机分工深度解析

文档教程Vibe Coding示例工程 【免费下载链接】vibe-vibe The First Systematic Vibe Coding Open-Source Tutorial | From Zero to Full-Stack, Empowering Everyone to Build Products with AI | Live at: www.vibevibe.cn ;首个系统化 Vibe Coding 开源教程 | 零…

2026/10/12 0:53:26 阅读更多 →
不用模拟器也能玩PS5游戏?拆解AnyPS5的“非模拟器魔法“:relinker重链接+PRX库+RDNA到SPIR-V

不用模拟器也能玩PS5游戏?拆解AnyPS5的“非模拟器魔法“:relinker重链接+PRX库+RDNA到SPIR-V

不用模拟器也能玩PS5游戏?拆解AnyPS5的"非模拟器魔法":relinker重链接PRX库RDNA到SPIR-V 【免费下载链接】AnyPS5 Tool for automatic PS5 executables porting to Linux and Windows 项目地址: https://gitcode.com/GitHub_Trending/an/Any…

2026/10/12 0:53:26 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →