
将 Nitro 应用部署到 Stormkit零配置 preset 与自动化部署全流程指南【免费下载链接】nitroNext Generation Server Toolkit. Create web servers with everything you need and deploy them wherever you prefer.项目地址: https://gitcode.com/GitHub_Trending/ni/nitro本篇指南以 Nitro 官方部署文档中的 Stormkit 章节为骨架结合仓库内stormkitpreset 的源码实现系统讲解如何在 Stormkit 平台上从创建应用、首次部署到日常自动部署的完整流程并深入剖析 Nitro 为 Stormkit 生成的运行时入口如何处理请求与响应。读完本文你将掌握通过stormkitpreset 一键构建、零配置自动检测以及手动触发部署的完整实战方案。Stormkit 集成概览从零配置自动检测说起Stormkit 是一个支持从 Git 仓库自动构建与发布的部署平台Nitro 为其提供了内置部署 preset。在 Nitro 的部署体系中Stormkit 属于零配置Zero-Config提供商——在 CI/CD 环境下执行生产构建时Nitro 会尝试自动检测运行环境并选择合适的 preset无需在配置中显式声明。在 部署总览文档 的Zero-Config Providers一节中Stormkit 与 AWS Amplify、Azure、Cloudflare、Firebase App Hosting、Netlify、Vercel、Zeabur 等平台并列均可通过环境变量自动识别自动检测依赖 CI/CD 环境中的识别变量构建时 Nitro 会自动选中stormkitpreset显式指定 preset 同样受支持适用于无法自动检测的场景详见下文指定 stormkit preset 的三种方式。需要提醒的是对于使用 Turborepo 的用户其 Strict Environment Mode 可能会干扰零配置检测。此时需要显式允许检测变量或使用 Loose Environment Mode即--env-modeloose标志否则检测可能失效。部署前准备在 Stormkit 上创建新应用进入 Stormkit 控制台的 New App 创建流程后需要完成两个关键步骤选择代码库来源支持 GitHub、Bitbucket、GitLab并授权 Stormkit 访问你的仓库以便后续拉取代码、执行构建并发布产物。该界面位于创建应用流程的 Step 1 of 2右侧的 CI CD 说明框明确提示授权 Git 提供商后Stormkit 即可访问仓库并实现自动部署。这也正是推送代码到主分支即可自动部署这一行为的前提。创建完成后无需在 Stormkit 侧做任何 Nitro 相关的特殊配置——构建命令由平台默认执行Nitro 会在构建阶段按stormkitpreset 产出平台所需的文件结构。部署到 Stormkit自动部署与手动触发Nitro 官方文档明确了 Stormkit 的默认部署行为自动部署当你向应用的主分支main推送变更时Stormkit 会自动触发一次部署手动部署对于首次部署等需要手动介入的场景点击Deploy now按钮即可立即触发。上图即手动部署的配置面板可指定环境production、分支main、构建命令Build Command与构建文件夹Build Folder并可通过 Publish deployment 开关决定是否发布该次部署。底部醒目的红色Deploy now按钮用于立即执行部署。手动触发适合以下场景应用创建完成后的首次部署此时尚无任何推送记录触发构建需要跳过 Git 推送、直接验证某个分支的构建结果平台自动检测/Webhook 异常时的兜底手段。指定 stormkit preset 的三种方式虽然 Stormkit 支持零配置自动检测但掌握显式指定 preset 的方法依然是部署 CI/CD 的推荐实践。参考 部署总览 中Changing the deployment preset一节有以下三种方式方式一NITRO_PRESET环境变量推荐用于 CI/CDNITRO_PRESETstormkit nitro build方式二--preset命令行参数nitro build --preset stormkit方式三在nitro.config.ts中配置import { defineConfig } from nitro; export default defineConfig({ preset: stormkit, });三种方式等价选择其一即可。在 CI/CD 流水线中环境变量方式最为灵活因为可以针对不同分支/环境切换 preset 而无需改动配置文件。源码解析stormkit preset 与运行时入口preset 定义构建产物的目录结构仓库中 stormkit/preset.ts 定义了完整的 preset 配置import { defineNitroPreset } from ../_utils/preset.ts; const stormkit defineNitroPreset( { entry: ./stormkit/runtime/stormkit, output: { dir: {{ rootDir }}/.stormkit, publicDir: {{ rootDir }}/.stormkit/public/{{ baseURL }}, }, }, { name: stormkit as const, stdName: stormkit, } ); export default [stormkit] as const;关键信息如下配置项值说明entry./stormkit/runtime/stormkit平台运行时入口文件位于src/presets/stormkit/runtime/stormkit.tsoutput.dir{{ rootDir }}/.stormkit构建输出根目录Stormkit 平台从该目录读取产物output.publicDir{{ rootDir }}/.stormkit/public/{{ baseURL }}静态资源输出目录支持baseURL插值适配子路径部署_meta.name/_meta.stdNamestormkitpreset 名称用于类型系统与自动检测匹配其中{{ baseURL }}插值意味着如果应用配置了baseURL例如部署在子路径下静态资源会自动输出到对应的子目录无需手动迁移文件。此外presets/_all.gen.ts 将stormkitpreset 注册进全局 preset 列表presets/_types.gen.ts 则将其纳入PresetName/PresetNameInput类型保证preset: stormkit在 TypeScript 配置中拥有完整的类型提示。运行时入口事件到响应的完整转换平台运行时入口 runtime/stormkit.ts 采用AWS Lambda Handler 风格导入了aws-lambda的类型定义Stormkit 会将部署事件以类似 Lambda 的格式传入。入口定义了平台事件与响应结构type StormkitEvent { url: string; // 例如 /my/path 或 /my/path?withquery path: string; method: string; body?: string; query?: Recordstring, Arraystring; headers?: Recordstring, string; rawHeaders?: Arraystring; }; type StormkitResponse { headers?: Recordstring, string; body?: string; buffer?: string; // base64 编码的二进制响应体 statusCode: number; errorMessage?: string; errorStack?: string; };核心处理逻辑分为四步1. 构造标准 Request将 Stormkit 事件的url、method、headers、body组装为 Web 标准Request对象随后交给 Nitro 应用处理const req new Request(event.url, { method: event.method || GET, headers: event.headers, body: event.body, }) as ServerRequest;2. srvx 兼容Nitro 内部基于 srvx 运行时抽象入口通过req.runtime记录当前运行时名称与原始事件便于插件、中间件按运行时分支处理req.runtime ?? { name: stormkit }; req.runtime.stormkit ?? { event, context } as any;3. 调用 Nitro 应用所有路由、中间件、Hooks 都在nitroApp.fetch(req)这一步统一执行返回标准Response。4. 响应编码响应体需要按内容类型决定返回body文本还是bufferbase64 二进制function isTextType(contentType ) { return /^text\/|\/(javascript|json|xml)|utf-?8/i.test(contentType); }text/*、application/javascript、application/json、application/xml等文本类型直接以 UTF-8 字符串返回其余类型如图片、字体、视频转成 base64 放入buffer字段并置isBase64Encoded标志交由 Stormkit 平台还原为二进制内容。响应头则会被拍平为Recordstring, string重复值用逗号连接Object.fromEntries( Object.entries(headers).map(([k, v]) [k, Array.isArray(v) ? v.join(,) : String(v)]) );从源码结构看该入口通过标准 Request 进、标准 Response 出的设计使 Stormkit 平台能够承载 Nitro 的全部能力——包括路由、服务端渲染、中间件、缓存与静态资源服务——而无需为平台特性编写额外代码。构建产物一览.stormkit目录使用stormkitpreset 执行nitro build后产物位于项目根目录的.stormkit文件夹.stormkit/ ├── public/ # 静态资源对应 publicDir支持 baseURL 子目录 └── ... # 服务端入口与其他构建产物Stormkit 平台在构建完成后即从该目录读取并发布应用。对于public/下的静态资源图片、CSS、JS 等平台会直接托管动态请求则交给运行时入口处理。从零配置到手动部署最佳实践小结环节推荐做法依据应用创建在 Stormkit 创建新应用并授权 Git 仓库stormkit.mdpreset 指定CI/CD 中使用NITRO_PRESETstormkit本地方便时用nitro build --preset stormkit部署总览首次部署点击Deploy now手动触发stormkit.md日常更新推送 main 分支触发自动部署stormkit.md构建产物检查.stormkit目录是否生成静态资源是否落入public/preset.tsTurborepo 用户使用 Loose Environment Mode 或显式放行检测变量部署总览按照上述流程你可以在数分钟内将 Nitro 应用接入 Stormkit 的自动化构建发布体系并利用其 AWS Lambda 兼容的运行时入口获得与 Nitro 开发模式一致的完整服务端能力。延伸阅读部署总览与零配置提供商列表Node.js 运行时部署默认生产 preset其他云平台 presetVercel、Cloudflare、NetlifyNitro 配置参考preset 与 baseURL 等【免费下载链接】nitroNext Generation Server Toolkit. Create web servers with everything you need and deploy them wherever you prefer.项目地址: https://gitcode.com/GitHub_Trending/ni/nitro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考