首页/新闻资讯/正文详情

RedwoodJS 禁用 API 层与数据库:纯静态站点部署实战指南

发布时间:2026/9/24 16:28:06 来源:云帆数科 栏目:资讯中心
RedwoodJS 禁用 API 层与数据库:纯静态站点部署实战指南
后端前端Web框架开发工具【免费下载链接】redwoodRedwoodGraphQL项目地址https://gitcode.com/gh_mirrors/re/redwood点击查看免费下载本文以 RedwoodJS 为背景完整讲解如何在不使用 API 层与数据库的前提下将一个 Redwood 项目改造成纯静态站点或本地 JSON 数据 静态页面的混合站点并部署到 Netlify。读完本文你将掌握删除api目录的正确姿势、通过yarn rw deploy netlify --prismafalse --dmfalse关闭 Prisma 与数据迁移、在netlify.toml中关闭函数构建以及利用web/public下的静态 JSON 文件配合浏览器原生fetch()与 Chart.js 渲染数据图表的完整实战方案。适用场景与前提RedwoodJS 虽然以全栈著称但并非每个项目都需要 GraphQL API 或数据库。以下两类场景非常适合禁用 API/数据库纯静态站点站点不需要任何外部数据例如个人主页、产品落地页、文档站低频数据站点只需要消化一个简单的 JSON 数据结构且数据变化频率极低——低到修改数据只需编辑一个纯文本文件、然后重新部署站点即可。本文以Netlify 作为部署目标编写原文档即以此为前提。若使用其他托管平台或自定义构建流程命令与配置可能有所差异需要结合对应平台的构建说明自行调整。相关平台完整部署流程可参考 Netlify 部署指南 与 部署总览。第一步删除 /api 目录最简单粗暴的方式是直接把整个/api目录删掉Redwood 应用在开发模式下依然可以正常工作rm -rf api删除后建议再运行一次yarn install清理掉那些已经不再被引用的依赖包让node_modules与锁文件保持整洁。说明Redwood 的目录约定是api服务端与web前端并存可参考仓库中任意一个完整项目例如 example-todo-main 项目 的目录结构。删除api后web侧依旧可以独立开发与构建。第二步禁用 Prisma 与数据迁移功能yarn rw deploy netlify命令中有两个关键参数--prisma与--dm--data-migrate的别名两者默认值均为true必须显式设置为false。在netlify.toml的构建命令中关闭它们[build] command yarn rw deploy netlify --prismafalse --dmfalse为什么必须关闭在本地开发环境中即使不带这两个参数也不会影响开发但一旦部署到生产环境至少以 Netlify 为部署目标时如果仍保持默认值true构建会报出No Prisma Schema found错误——因为我们已经删除了api目录Prisma 无从找到 schema 文件。源码验证这两个参数究竟做了什么从 Redwood CLI 的源码可以看到这两个参数的定义与默认值位于 deploy 命令的共享 helpers.option(prisma, { description: Apply database migrations, type: boolean, default: true, }) .option(data-migrate, { description: Migrate the data in your database, type: boolean, default: true, alias: dm, })而 deployHandler 会根据这些开关动态拼接最终执行的命令链let commandSet [] if (build) { commandSet.push(yarn rw build --verbose) } if (prisma) { commandSet.push(yarn rw prisma migrate deploy) } if (dataMigrate) { commandSet.push(yarn rw>[build] command yarn rw deploy netlify --prismafalse --dmfalse publish web/dist # functions api/dist/functions [dev] command yarn rw dev [[redirects]] from /* to /index.html status 200各配置项含义commandNetlify 构建时执行的命令这里已关闭 Prisma 与数据迁移publish指定静态站点的发布目录为web/distRedwoodweb侧构建产物# functions api/dist/functions注释掉这一行Netlify 便不会尝试把api/dist/functions下的代码部署为 Lambda 函数[dev]/command yarn rw devNetlify Dev 本地开发启动命令[[redirects]]SPA 回退规则将任意路径请求重定向到index.html状态码 200保证前端路由在刷新时可用。对照默认模板理解差异Redwood 官方提供的 netlify.toml 模板yarn rw setup deploy netlify生成默认包含functions api/dist/functions这一行见 setup deploy 的 Netlify 模板[build] command yarn rw deploy netlify publish web/dist functions api/dist/functions [build.environment] NODE_VERSION 20仓库中的完整示例项目如 example-todo-main 的 netlify.toml同样采用默认配置。而本文的静态站点方案正是在这个默认模板基础上① 构建命令追加--prismafalse --dmfalse② 注释掉functions行。如果只是纯静态站点、完全不需要访问任何数据做到这一步就已经完成了。继续往下看如何用随 web 侧一起部署的本地 JSON 文件充当数据源构建一个混合型站点。第四步从本地 JSON 文件读取数据下面演示一个完整场景展示 2017 年 1 月 30 日当周俄罗斯莫斯科的天气预报折线图。这个场景听起来很特别是因为它用的正是 OpenWeather API 的官方示例数据天气 API 示例数据。你可以从 OpenWeather 官方示例接口获取 JSON也可以直接使用下文给出的完整数据保存为web/public/forecast.json{ cod: 200, message: 0, city: { geoname_id: 524901, name: Moscow, lat: 55.7522, lon: 37.6156, country: RU, iso2: RU, type: city, population: 0 }, cnt: 7, list: [ { dt: 1485766800, temp: { day: 262.65, min: 261.41, max: 262.65, night: 261.41, eve: 262.65, morn: 262.65 }, pressure: 1024.53, humidity: 76, weather: [ { id: 800, main: Clear, description: sky is clear, icon: 01d } ], speed: 4.57, deg: 225, clouds: 0, snow: 0.01 }, { dt: 1485853200, temp: { day: 262.31, min: 260.98, max: 265.44, night: 265.44, eve: 264.18, morn: 261.46 }, pressure: 1018.1, humidity: 91, weather: [ { id: 600, main: Snow, description: light snow, icon: 13d } ], speed: 4.1, deg: 249, clouds: 88, snow: 1.44 }, { dt: 1485939600, temp: { day: 270.27, min: 266.9, max: 270.59, night: 268.06, eve: 269.66, morn: 266.9 }, pressure: 1010.85, humidity: 92, weather: [ { id: 600, main: Snow, description: light snow, icon: 13d } ], speed: 4.53, deg: 298, clouds: 64, snow: 0.92 }, { dt: 1486026000, temp: { day: 263.46, min: 255.19, max: 264.02, night: 255.59, eve: 259.68, morn: 263.38 }, pressure: 1019.32, humidity: 84, weather: [ { id: 800, main: Clear, description: sky is clear, icon: 01d } ], speed: 3.06, deg: 344, clouds: 0 }, { dt: 1486112400, temp: { day: 265.69, min: 256.55, max: 266, night: 256.55, eve: 260.09, morn: 266 }, pressure: 1012.2, humidity: 0, weather: [ { id: 600, main: Snow, description: light snow, icon: 13d } ], speed: 7.35, deg: 24, clouds: 45, snow: 0.21 }, { dt: 1486198800, temp: { day: 259.95, min: 254.73, max: 259.95, night: 257.13, eve: 254.73, morn: 257.02 }, pressure: 1029.5, humidity: 0, weather: [ { id: 800, main: Clear, description: sky is clear, icon: 01d } ], speed: 2.6, deg: 331, clouds: 29 }, { dt: 1486285200, temp: { day: 263.13, min: 259.11, max: 263.13, night: 262.01, eve: 261.32, morn: 259.11 }, pressure: 1023.21, humidity: 0, weather: [ { id: 600, main: Snow, description: light snow, icon: 13d } ], speed: 5.33, deg: 234, clouds: 46, snow: 0.04 } ] }关键机制web/public目录下的任何文件都会被 Netlify 原样托管跳过一切构建过程。也就是说你把forecast.json放进web/public它就等同于站点根路径下的一个静态资源/forecast.json。这正是编辑一个纯文本文件 → 重新部署这种极简数据更新流程的基础。第五步用 React 组件拉取并展示数据接下来让 React 组件远程获取这份 JSON 并展示在页面上。先生成一个首页yarn rw generate page home /然后使用浏览器内置的fetch()获取数据先把原始 JSON 直接 dump 到屏幕上验证链路是否打通import { useState, useEffect } from react const HomePage () { const [forecast, setForecast] useState({}) useEffect(() { fetch(/forecast.json) .then((response) response.json()) .then((json) setForecast(json)) }, []) return div{JSON.stringify(forecast)}/div } export default HomePage这里用useState保存天气数据用useEffect在组件挂载时触发数据加载。由于fetch请求的是同源静态资源/forecast.json不存在跨域问题在本地开发与 Netlify 生产环境都能直接工作。第六步用 Chart.js 绘制天气曲线数据链路打通后引入 Chart.js 做简单图表。Chart.js 是 Redwood 项目中常用的第三方图表库之一通过yarn workspace web将其安装到web侧yarn workspace web add chart.js先用假数据验证图表渲染import { useState, useEffect, useRef } from react import Chart from chart.js const HomePage () { const chartRef useRef() const [forecast, setForecast] useState({}) useEffect(() { fetch(/forecast.json) .then((response) response.json()) .then((json) setForecast(json)) }, []) useEffect(() { new Chart(chartRef.current.getContext(2d), { type: line, data: { labels: [Jan, Feb, March], datasets: [ { label: High, data: [86, 67, 91], }, { label: Low, data: [45, 43, 55], }, ], }, }) }, [forecast]) return canvas ref{chartRef} / } export default HomePage要点说明useRef创建chartRef并绑定到canvas元素Chart.js 通过chartRef.current.getContext(2d)获取 2D 绘图上下文图表创建逻辑放在第二个useEffect中依赖数组为[forecast]即等天气数据加载完成后才绘制图表这一段先用写死的假数据[86, 67, 91]等验证 Chart.js 渲染链路是否正常。把真实 JSON 数据转换成 Chart.js 需要的格式假数据渲染正常后剩下的工作就是把天气 JSON 转换成 Chart.js 期望的结构。最终版HomePage增加了两个数据转换函数并正确处理日期显示import { useState, useEffect, useRef } from react import Chart from chart.js const MONTHS [ Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec, ] const getDates (forecast) { return forecast.list.map((entry) { const date new Date(0) date.setUTCSeconds(entry.dt) return ${MONTHS[date.getMonth()]} ${date.getDate()} }) } const getTemps (forecast) { return [ { label: High, data: forecast.list.map((entry) kelvinToFahrenheit(entry.temp.max)), borderColor: red, backgroundColor: transparent, }, { label: Low, data: forecast.list.map((entry) kelvinToFahrenheit(entry.temp.min)), borderColor: blue, backgroundColor: transparent, }, ] } const kelvinToFahrenheit (temp) { return ((temp - 273.15) * 9) / 5 32 } const HomePage () { const chartRef useRef() const [forecast, setForecast] useState(null) useEffect(() { fetch(/forecast.json) .then((response) response.json()) .then((json) setForecast(json)) }, []) useEffect(() { if (forecast) { new Chart(chartRef.current.getContext(2d), { type: line, data: { labels: getDates(forecast), datasets: getTemps(forecast), }, }) } }, [forecast]) return canvas ref{chartRef} / } export default HomePage各函数的职责MONTHS月份英文缩写常量表用于把 Unix 时间戳格式化为Jan 30这样的可读标签getDates(forecast)遍历forecast.list把每条记录的dtUnix 秒级时间戳通过new Date(0)setUTCSeconds(entry.dt)转换为日期对象再格式化为月份 日期作为折线图的 X 轴标签getTemps(forecast)分别提取entry.temp.max与entry.temp.min经kelvinToFahrenheit把开尔文温度换算为华氏度生成High红线与Low蓝线两条数据集kelvinToFahrenheit温度单位换算工具函数。注意forecast的初始值从{}改成了null并在绘制前增加if (forecast)判断——这样既避免在数据尚未到达时对undefined调用forecast.list.map也防止重复创建 Chart 实例。渲染成功后页面会出现一条红色高温曲线与一条蓝色低温曲线。收尾部署到生产至此一个无 API、无数据库的混合型站点就完成了数据存于web/public/forecast.json前端通过静态资源请求读取并在浏览器端用 Chart.js 绘制。剩余工作就是提交代码并交给 Netlify 构建部署——注意构建命令必须保持--prismafalse --dmfalse且functions行保持注释状态。总结RedwoodJS 的核心价值在于让需要访问数据库或第三方 API的全栈应用开发更轻松但它同样可以用于纯静态站点以及本文演示的这种混合站点——当你想消化并展示数据但数据源只是自己 URL 下的一个静态文件时。核心要点回顾删除api目录后开发模式依旧可用yarn rw deploy netlify --prismafalse --dmfalse关闭数据库迁移与数据迁移二者默认均为true源码见 deploy helpers注释掉netlify.toml中的functions行阻止 Netlify 扫描 Lambda 函数代码web/public下的文件被原样托管可充当极简数据源配合浏览器fetch()与 Chart.js 即可渲染数据图表。这种方案的额外收益是数据更新成本极低改一个 JSON 文件重新部署无需维护数据库、无需关心迁移部署链路更简单也省去了 Lambda 函数的冷启动与配额顾虑。赞分享后端前端Web框架开发工具【免费下载链接】redwoodRedwoodGraphQL项目地址https://gitcode.com/gh_mirrors/re/redwood点击查看免费下载相关推荐RedwoodJS 禁用 API 层与数据库从全栈应用到纯静态站点部署实战指南RedwoodJS 禁用 API 层与数据库从全栈应用到纯静态站点部署实战指南 本指南讲解如何在 RedwoodJS 项目中彻底去掉 API 层与数据库依赖后端前端Web框架开发工具Redwood 禁用 API 与数据库指南将应用部署为纯静态站点Redwood 禁用 API 与数据库指南将应用部署为纯静态站点 本指南讲解如何在 Redwood 项目中彻底关闭 API 层与数据库依赖仅保留 Web 前后端前端Web框架开发工具Redwood 无后端部署实战禁用 API 与数据库构建纯静态站点Redwood 无后端部署实战禁用 API 与数据库构建纯静态站点 Redwood 是面向全栈应用的框架但并不是每个项目都需要 GraphQL API 与后端前端Web框架开发工具上一篇如何快速获取百度网盘真实下载链接面向普通用户的完整指南下一篇两步跑通抖音去水印下载单条视频、整个主页都能存创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Relay 交互查询实战:用 Query Variables 与 Preloaded Queries 优化二次数据获取
Relay 交互查询实战:用 Query Variables 与 Preloaded Queries 优化二次数据获取

前端开发工具 【免费下载链接】relay Relay is a JavaScript framework for building data-driven React applications. 项目地址: https://gitcode.com/gh_mirrors/relay29/relay 点击查看 免费下载 本指南源自 Relay 官方教程系列(website/versioned_… · 2026/9/24 16:27:47

protobuf-format-cj 快速开始:5分钟从编译构建到第一个 Protobuf JSON 序列化示例
protobuf-format-cj 快速开始:5分钟从编译构建到第一个 Protobuf JSON 序列化示例

protobuf-format-cj 快速开始:5分钟从编译构建到第一个 Protobuf JSON 序列化示例 【免费下载链接】protobuf-format-cj 根据 protobuf 数据,提供不同格式的序列化 项目地址: https://gitcode.com/Cangjie-TPC/protobuf-format-cj protobuf-forma… · 2026/9/24 16:27:47

Wand-Enhancer新手指南:给WeMod客户端打上本地补丁的5步教程
Wand-Enhancer新手指南:给WeMod客户端打上本地补丁的5步教程

Wand-Enhancer新手指南:给WeMod客户端打上本地补丁的5步教程 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 给WeMod打补丁这件事&… · 2026/9/24 16:27:47

【Dify】FLUX绘画机器人多模态识别与语音交互自动化
【Dify】FLUX绘画机器人多模态识别与语音交互自动化

以多模态智能交互为核心的自动化创作方式,正推动AI艺术、教育与硬件结合的快速发展。视觉识别、语音播报与机器人控制的结合,为传统绘画和教学带来了新的可能。 本文梳理FLUX绘画机器人结合多模态识别和语音播报的完整工作流,实现从图片输入、内容识别、创意生成到语音解读… · 2026/9/24 17:03:27

国军标B码闰秒的测试方法
国军标B码闰秒的测试方法

此图来自成都云智优创科技有限公司www.iyzyc.cn简介GJB-B码发生器测试仪是专门用于产生B码的测试仪,借助它可以用来测试带B码对时的接收设备。通过配置软件,可以输出为任意时间,特别是对临界时间的测试,比如2099年12月31日23时59分… · 2026/9/24 17:03:27

大麦自动抢票指南:Python Selenium + Appium 双端抢票脚本完整教程
大麦自动抢票指南:Python Selenium + Appium 双端抢票脚本完整教程

大麦自动抢票指南:Python Selenium Appium 双端抢票脚本完整教程 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase ticket-purchase 是一… · 2026/9/24 17:02:56

ParlAI Seq2Seq Agent 深度指南:基于 RNN 的序列到序列生成模型
ParlAI Seq2Seq Agent 深度指南:基于 RNN 的序列到序列生成模型

NLP人工智能深度学习 【免费下载链接】ParlAI A framework for training and evaluating AI models on a variety of openly available dialogue datasets. 项目地址: https://gitcode.com/gh_mirrors/pa/ParlAI 点击查看 免费下载 本指南围绕 ParlAI 仓库中 parla… · 2026/9/24 17:02:56

Yii 2 错误处理完全指南:ErrorHandler 组件、异常页面定制与多格式错误响应
Yii 2 错误处理完全指南:ErrorHandler 组件、异常页面定制与多格式错误响应

Yii 2 错误处理完全指南:ErrorHandler 组件、异常页面定制与多格式错误响应 【免费下载链接】yii2 Yii 2: The Fast, Secure and Professional PHP Framework 项目地址: https://gitcode.com/gh_mirrors/yi/yii2 本篇技术指南以 Yii 2 内置的 yii\web\ErrorH… · 2026/9/24 17:02:56

前端实战:滚动监听实现顶部 logo 平滑显隐效果
前端实战:滚动监听实现顶部 logo 平滑显隐效果

开发弹窗、侧边抽屉、全屏遮罩这类组件时,经常会遇到一个问题:弹窗弹出后,底层页面依然可以滚动,体验很差。常见方案就是控制 body 的滚动,本文使用 jQuery 实现禁止页面滑动和恢复页面滑动,同时说明坑点。… · 2026/9/24 17:02:56

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码