ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Redwood 构建全解析:API 侧转译与 Web 侧打包的完整流程(Builds)

Redwood 构建全解析:API 侧转译与 Web 侧打包的完整流程(Builds) 后端前端Web框架开发工具【免费下载链接】redwoodRedwoodGraphQL项目地址https://gitcode.com/gh_mirrors/re/redwood点击查看免费下载本指南围绕 Redwood 项目的构建Builds机制展开系统讲解yarn rw build命令在 API 与 Web 两个侧side上的产物生成过程API 侧源码如何被 Babel 转译进./api/distWeb 侧如何被打包进./web/dist以及如何在本地模拟 Netlify 的 Lambda 函数打包流程。读完本文你将掌握 Redwood 生产构建的完整命令参数、产物结构、部署前的验证步骤并能基于仓库源码理解每个构建环节的底层实现。一、构建命令总览yarn rw buildRedwood 的构建入口是 CLI 中的build命令其定义位于 packages/cli/src/commands/build.jsexport const command build [side..] export const description Build for production命令的核心用法与参数如下参数类型默认值说明side位置参数array全部侧api、web指定要构建的侧可选值为项目中实际存在的侧例如yarn rw build api只构建 API 侧--verbose, -vbooleanfalse输出更详细的构建过程日志--prerenderbooleantrueWeb 侧构建完成后是否执行预渲染--prisma, --dbbooleantrue构建前是否生成 Prisma Client从源码可以看出side的可选项并非写死的而是通过sides()从当前项目动态获取因此无论项目是标准的api/web双子目录结构还是只包含单一侧命令都能正确收敛到实际存在的构建目标。当命令被解析后实际处理逻辑委托给 packages/cli/src/commands/buildHandler.js 中的handler。它把整个构建过程组织成一条任务流水线基于 Listr2依次执行生成 Prisma Client当--prisma开启、api/db/schema.prisma存在、且本次构建涉及 api 侧或存在预渲染路由时生成 GraphQL Fragments / Trusted Documents 所需的类型仅当redwood.toml中启用了graphql.fragments或graphql.trustedDocuments时校验 GraphQL schemaloadAndValidateSdls构建 API构建 Web。这正是原文档所描述内容的工程化全景构建并非一次简单的转译而是一套先校验、再转译、后部署的完整流水线。二、API 侧构建Babel 转译产出./api/dist原文档明确指出The api side of Redwood is transpiled by Babel into the./api/distfolder.即 API 侧的 TypeScript/JavaScript 源码会经过 Babel 转译最终输出到api/dist目录。在当前的仓库实现中这一流程由 packages/internal/src/build/api.ts 承载cleanApiBuild()会在构建前清空api/dist保证每次都是干净构建buildApi()调用findApiFiles()收集 API 侧全部源文件随后交给transpileApi()转译内核是 esbuild但每个.js/.ts/.tsx/.jsx文件在加载时都会经过一个名为rw-esbuild-babel-transform的插件调用redwoodjs/babel-config中的transformWithBabel执行真正的 Babel 转译——这正是API 侧由 Babel 转译这一描述的源码级落地。该构建的 esbuild 选项还揭示了几个重要细节{ platform: node, target: node20, format: projectSideIsEsm(api) ? esm : cjs, bundle: false, outdir: rwjsPaths.api.dist, sourcemap: true, }target: node20产物面向 Node.js 20 运行环境编译format取决于项目配置若 API 侧启用了 ESM则输出 ES Module否则输出 CommonJSbundle: falseAPI 侧源码不做整体打包仅逐文件转译函数之间通过正常的模块解析相互引用sourcemap: true每个转译产物会附带.map文件并写入sourceMappingURL注释便于生产环境排错时还原源码。此外构建流水线在转译 API 之前还会执行 Verifying graphql schema... 步骤loadAndValidateSdls即校验所有 GraphQL SDL 文件确保 schema 合法后再产出代码避免把错误带入生产环境。三、模拟 Netlify 构建从函数到 Lambda zip 包API 侧最常见的部署目标是 Serverless 平台。原文档以 Netlify 为例给出了在本地完整模拟其构建步骤的方法yarn rw build api cd api yarn zip-it-and-ship-it dist/functions/ zipballs/这两条命令的职责分别是yarn rw build api仅构建 API 侧把api/src/functions下的函数转译到api/dist/functionszip-it-and-ship-it逐个解析api/dist/functions目录下的 Lambda 函数文件为每个函数生成一个独立的 zip 包zip 包内包含该函数运行所需的全部依赖——这正是 Serverless 部署要求的每个函数自包含形态。需要特别注意的是netlify/zip-it-and-ship-it并不是 Redwood 框架自带的依赖需要手动安装为api/workspace 的 devDependencyyarn workspace api add -D netlify/zip-it-and-ship-it安装完成后即可在api目录下直接调用yarn zip-it-and-ship-it执行打包。这与部署文档中描述的 Serverless 发布流程相辅相成可参见仓库中的 Serverless 部署文档 了解 AWS Serverless 场景下的完整部署说明。四、Web 侧构建Webpack 打包产出./web/dist原文档对 Web 侧的描述是The web side of Redwood is packaged by Webpack into the./web/distfolder.即在 v3.x 时代Web 侧源码React 组件、路由、样式等由 Webpack 负责打包产物输出到web/dist。这个目录就是最终可以静态托管或交给 CDN 部署的站点本体。值得说明的是构建工具链本身是持续演进的当前仓库主分支的文档docs/docs/builds.md已将其更新为 The web side of Redwood is built by Vite into the./web/distfolder.对应的 buildHandler.js 中 Web 构建也改由redwoodjs/vite/bins/rw-vite-build.mjs驱动以子进程方式运行cwd指向 web 目录以保证 PostCSS/Tailwind 等插件能正确解析路径。因此在阅读不同版本文档时需要注意Webpack 打包与Vite 构建分别对应 Redwood v3.x 与当前版本。无论底层是 Webpack 还是 Viteweb/dist都会包含一份index.html。对于非 Streaming SSR 的部署场景构建完成后会把index.html复制为200.html——这是 Netlify 等平台约定的兜底页面文件名用于 SPA 路由在刷新/直达时能够正确返回应用入口。五、构建后的预渲染与部署衔接构建流水线中还有一个容易被忽略的环节预渲染Prerender。当执行yarn rw build默认--prerender true且项目中存在标记为可预渲染的路由时Web 构建完成后会触发yarn rw prerender独立子进程执行以避免 Prisma Client 模块缓存问题将静态路由渲染成 HTML 写入产物。如果项目中没有标记任何可预渲染的路由命令会给出提示You have not marked any routes to prerender in your Routes.此时可以放心忽略——预渲染是可选项不影响常规的 SPA 产物有效性。整个构建流程结束后你的部署目录就绪api/dist转译后的 API 代码可直接由 Node 运行时或 Serverless 平台加载web/dist打包后的前端静态资源可直接托管或上传 CDN。随后即可依据部署目标选择对应流程仓库中提供了丰富的部署指南可供继续阅读例如 Baremetal 部署、Serverless 部署 以及 Render 部署 等。六、小结Redwood 的构建机制可以概括为三条主线API 侧源码经 Babel 转译当前实现由 esbuild 驱动、逐文件调用 Babel 插件产出api/dist面向 Node 20 运行时支持 CJS/ESM 与 sourcemapWeb 侧v3.x 时代由 Webpack 打包进web/dist当前版本已迁移至 Vite并针对静态托管生成200.html兜底页构建前流水线Prisma Client 生成、GraphQL schema 校验、Fragments/Trusted Documents 类型生成确保进入生产的代码是自洽且可部署的。对于 Serverless 部署场景yarn rw build api配合zip-it-and-ship-it即能在本地完整复现 Netlify 的函数打包步骤这也是验证 Lambda 函数依赖完整性最直接的手段。赞分享后端前端Web框架开发工具【免费下载链接】redwoodRedwoodGraphQL项目地址https://gitcode.com/gh_mirrors/re/redwood点击查看免费下载相关推荐RedwoodJS 构建Builds完全指南从 API 转译到 Web 打包的生产构建流程RedwoodJS 构建Builds完全指南从 API 转译到 Web 打包的生产构建流程 RedwoodJS 作为一个全栈框架将应用划分为 api 与后端前端Web框架开发工具Redwood 认证体系全解从 web 侧 useAuth 到 api 侧 authDecoder 的端到端集成指南Redwood 认证体系全解从 web 侧 useAuth 到 api 侧 authDecoder 的端到端集成指南 Redwood 将认证Authenti后端前端Web框架开发工具PPSSPP iOS 构建全流程CMake 工具链、Xcode 工程生成与侧载打包解析PPSSPP iOS 构建全流程CMake 工具链、Xcode 工程生成与侧载打包解析 PPSSPP 的 iOS 支持完全建立在 CMake 交叉编译 X虚拟化图形学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表