新闻详情

新闻详情

首页 / 资讯中心 / 详情

深入理解 RedwoodJS 项目文件结构:api / web / scripts 三端(Side)架构全解析

发布时间:2026/11/5 10:08:23来源:尧图网络
深入理解 RedwoodJS 项目文件结构:api / web / scripts 三端(Side)架构全解析
深入理解 RedwoodJS 项目文件结构api / web / scripts 三端Side架构全解析【免费下载链接】redwoodRedwoodGraphQL项目地址: https://gitcode.com/gh_mirrors/re/redwood本篇技术指南以 RedwoodJS 官方教程第一章《Redwood File Structure》为骨架系统拆解一个全新 Redwood 应用生成出的目录结构后端api、前端web与独立脚本scripts三端如何分工、每个目录与文件承担什么职责以及它们如何通过 Yarn Workspaces 协作。读完本文你将掌握 RedwoodJS 应用的目录组织范式能够快速定位数据库 Schema、GraphQL 定义、Service 业务逻辑、路由与页面等关键代码并理解约定优于配置在 Redwood 中是如何落地的。顶层结构api / scripts / web 三端布局一个新创建的 RedwoodJS 应用在顶层会有三个目录api、scripts和web配置文件暂不展开。RedwoodJS 刻意将后端api与前端web的关注点分离到代码库中各自独立的路径下——这正是 Yarn 所称的workspaces工作区而在 Redwood 的语境里它们被称作sides端。这种一应用双端的布局是理解整个框架的前提前端只管 React 界面后端只管 GraphQL API 与数据访问二者通过约定好的目录与命名自动建立关联。├── api │ ├── db │ │ ├── schema.prisma │ ├── dist │ ├── src │ │ ├── directives │ │ │ ├── requireAuth │ │ │ └── skipAuth │ │ ├── functions │ │ │ └── graphql.js │ │ ├── graphql │ │ ├── lib │ │ │ ├── auth.js │ │ │ ├── db.js │ │ │ └── logger.js │ │ └── services │ └── types │ ├── scripts │ └── seed.js │ └── web ├── public │ ├── favicon.png │ ├── README.md │ └── robots.txt └── src ├── components ├── layouts ├── pages │ ├── FatalErrorPage │ │ └── FatalErrorPage.js │ └── NotFoundPage │ └── NotFoundPage.js ├── App.js ├── index.css ├── index.html └── Routes.jsTypeScript 项目中仅扩展名不同graphql.ts、auth.ts、FatalErrorPage.tsx、Routes.tsx等目录骨架完全一致。当前仓库的__fixtures__/empty-project就是一个完整的 TS 版空项目样例其实际目录树与本结构一一对应。由于前后端分属两个 Yarn workspace后续安装依赖时必须显式指明包要装进哪一端例如仅示意语法勿直接执行yarn workspace web add marked yarn workspace api add better-fsscripts目录则用于存放与api、web两端无直接关联、需要从命令行运行的 Node 脚本。其中的seed.{js,ts}用于向数据库填充应用运行所必需的基础数据比如管理员账号或站点配置。在空项目中该文件默认只是一段占位逻辑——见 seed.ts它导出一个async函数注释中演示了如何用db.user.createMany()批量写入种子用户并在末尾打印提示信息。api 目录后端全解析api目录下共有四个子目录db、dist、src与types。db数据库的管道schema.prisma存放数据库 schema表与列的完整定义。以空项目模板为例其内容如下见 schema.prismadatasource db { provider sqlite url env(DATABASE_URL) directUrl env(DIRECT_URL) } generator client { provider prisma-client-js binaryTargets native } model UserExample { id Int id default(autoincrement()) email String unique name String? }默认数据源是 SQLite通过DATABASE_URL环境变量读取连接串generator client声明使用 Prisma Client 生成器。第一次添加数据表并执行迁移后这里还会自动出现 SQLite 数据库文件dev.db以及一个migrations目录——migrations中的迁移文件记录了数据库 schema 随时间变化的每一次快照是团队协作与版本回滚的基础。dist编译产物dist存放 api 端的编译输出开发阶段无需关心构建时由 Redwood 自动生成。src全部后端源码api/src下包含五个目录directives存放 GraphQL schema directivesschema 指令用于控制查询访问权限或转换字段值。新项目预置两个指令requireAuth校验用户是否已认证并匹配可选的角色列表。空项目中的实现见 requireAuth.ts它通过createValidatorDirective定义requireAuth(roles: [String])在validate中调用src/lib/auth导出的requireAuth。skipAuth跳过鉴权、允许公开访问。实现见 skipAuth.tsvalidate为空函数即放行。functions除 Redwood 自动生成的graphql.{js,ts}外存放应用所需的任何 lambda functionsimport { createGraphQLHandler } from redwoodjs/graphql-server import directives from src/directives/**/*.{js,ts} import sdls from src/graphql/**/*.sdl.{js,ts} import services from src/services/**/*.{js,ts} import { db } from src/lib/db import { logger } from src/lib/logger export const handler createGraphQLHandler({ loggerConfig: { logger, options: {} }, directives, sdls, services, onException: () { // Disconnect from your database with an unhandled exception. db.$disconnect() }, })注意其中的 glob 通配符src/directives/**/*、src/graphql/**/*.sdl、src/services/**/*——这揭示了 Redwood 的核心约定directives、SDL 与 services 会自动按目录扫描并注册进 GraphQL Handler这正是约定优于配置的底层实现。graphql存放用 Schema Definition LanguageSDL书写的 GraphQL schema 文件文件名以.sdl.{js,ts}结尾。SDL 声明了查询、变更与对应的 GraphQL 类型是前后端契约的载体。lib预置三个文件同时可存放其他放哪都不太合适的 api 侧代码auth.{js,ts}初始是添加鉴权功能的占位文件。空项目版本见 auth.ts内置三个基础函数isAuthenticated()目前恒返回true模拟已登录用户hasRole({ roles })判断角色参数是否传入requireAuth({ roles })委托给isAuthenticated()。注释明确说明真正接入认证后这里会被实现为真实逻辑。db.{js,ts}实例化 Prisma 数据库客户端用于与数据库通信。实现见 db.tsnew PrismaClient({ log: emitLogLevels([info, warn, error]) })并通过handlePrismaLogging将 Prisma 日志接入 Redwood logger。logger.{js,ts}配置日志。实现见 logger.ts调用createLogger({})创建基于 pino 的 logger可通过RedwoodLoggerOptions自定义options日志格式、脱敏、destination输出到文件或传输流与showConfig等。services存放与数据相关的业务逻辑。GraphQL 的查询/变更最终落在这里——也就是通常所说的resolvers解析器但其组织形式更强调可复用性同一份业务代码可以在应用的其他位置如后台任务、脚本直接调用而非仅仅服务于 GraphQL 层。types自动生成的类型types存放自动编译生成的 GraphQL 类型TypeScript 类型定义开发阶段可以忽略由 Redwood 在开发/构建流程中自动维护。web 目录前端全解析web目录对应前端 React 应用同样分为静态资源区与源码区。public静态资源区public存放不经过 React 组件处理的资源——它们会被原样复制到最终应用的根目录favicon.png浏览器标签页图标新应用默认使用 RedwoodJS logo。README.md说明何时、如何使用public文件夹存放静态资源并给出在组件内通过打包器导入资源的最佳实践。仓库中的 README.md 强调public中的文件会绕过 JS 模块系统直接复制进构建产物因此应克制使用仅放置 favicon、robots.txt、manifest、与打包器不兼容的库等一般场景优先在组件内import资源让打包器完成校验、路径处理与打包例如import logo from ./my-logo.jpg。robots.txt控制搜索引擎爬虫等 Web 索引器的抓取行为。src前端源码区components存放传统 React 组件以及 Redwood 特有的Cells一种数据驱动的声明式组件范式负责加载/空态/失败态/成功态的自动管理教程后续章节会专门讲解。layouts存放包裹内容、跨多个页面共享的 HTML/组件结构布局。pages存放页面组件可选地被包裹在 Layout 中是某个 URL 对应的落地页例如/articles/hello-world映射到一页/contact-us映射到另一页。新应用内置两个页面NotFoundPage.{js,tsx}当没有其他路由匹配时渲染。空项目版本见 NotFoundPage.tsx渲染居中显示的 404 Page Not Found。FatalErrorPage.{js,tsx}当出现无法恢复的未捕获错误否则应用会崩溃渲染为白屏时渲染。空项目版本见 FatalErrorPage.tsx注意其实现细节仅在NODE_ENV development时加载redwoodjs/web的开发版错误页生产构建中不包含该错误页同时注释提醒应尽量保持该页面简单避免它自身再抛错。App.{js,tsx}引导代码负责把整个 Redwood 应用拉起来。空项目版本见 App.tsx外层是FatalErrorBoundary内部依次包裹RedwoodProvider支持titleTemplate标题模板与RedwoodApolloProviderGraphQL 客户端最后挂载Routes /。index.css自定义 CSS 的起点。文档提到还有很多方案可选例如 TailwindCSS——用好之后可能整个应用生命周期都无需手写自定义 CSS。index.html标准的 React 应用起始 HTML 文件是浏览器首先收到的页面骨架。Routes.{js,tsx}路由定义负责把 URL 映射到某个 Page。空项目版本见 Routes.tsx其文件头注释揭示了页面自动导入约定src/pages下所有 Page 组件自动导入子目录需大写并作为组件名前缀例如src/pages/HomePage/HomePage.js对应HomePagesrc/pages/Admin/BooksPage/BooksPage.js对应AdminBooksPage。默认内容即一个Router加一条notfound兜底路由const Routes () { return ( Router Route notfound page{NotFoundPage} / /Router ) }配套配置文件redwood.toml虽然目录结构讲解暂时排除了配置文件但redwood.toml是让一个 Redwood 应用成为 Redwood 应用的关键见 redwood.toml。它按端声明配置[web]下的title、端口8910、apiUrl默认/.redwood/functions与需要暴露给前端的includeEnvironmentVariables[api]下的端口8911[browser]下的open true表示启动时自动打开浏览器。删除该文件后运行yarn rw dev会直接报错。小结与后续学习路线至此RedwoodJS 应用的骨架已经清晰api端承载数据库db、GraphQL 层directives/graphql/functions、基础能力lib与业务逻辑servicesweb端承载静态资源public与 React 应用components/layouts/pages/Routesscripts端承载独立的 Node 脚本。后续教程将在这份骨架之上逐目录深入创建数据表db/schema.prisma、编写 SDL 与 Service、通过rw g命令生成页面与布局、接入 Cells 与认证逐步把这些空目录填满成完整的应用。【免费下载链接】redwoodRedwoodGraphQL项目地址: https://gitcode.com/gh_mirrors/re/redwood创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/4 15:56:54

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/4 22:55:41

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/4 17:01:23

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/4 12:33:12

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/5 4:24:57

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/5 4:24:57

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉