Builder.io Svelte SDK 使用指南:从安装到 SvelteKit 集成实战
2026/9/16 14:45:50 网站建设 项目流程

Builder.io Svelte SDK 使用指南:从安装到 SvelteKit 集成实战

【免费下载链接】builderVisual Development for React, Vue, Svelte, Qwik, and more项目地址: https://gitcode.com/GitHub_Trending/bu/builder

本指南以 packages/sdks/output/svelte/README.md 为骨架,系统讲解 Builder.io Svelte SDK 的定位、生成方式、安装步骤与 SvelteKit 集成方案。你将掌握@builder.io/sdk-svelte的核心 API(ContentfetchOneEntryisPreviewinggetBuilderSearchParams)的真实用法,并了解该 SDK 多环境构建(浏览器/Node/边缘运行时)的底层机制。

一、SDK 定位:由 Mitosis 生成的 Svelte 渲染层

Builder.io Svelte SDK 是 Builder.io 新一代 SDK 体系中的一员,它的核心职责是:在 Svelte 应用中渲染 Builder.io 可视化编辑器产出的内容,并将自定义组件接入可视化编辑流程

关键信息来自 packages/sdks/output/svelte/README.md:

  • 该 SDK 由 Mitosis 自动生成,并非手写维护;
  • Mitosis 的源码位于仓库的 packages/sdks/src,生成产物输出到packages/sdks/output/目录;
  • 同一套 Mitosis 源码同时生成 React、Vue 3、Svelte、SolidJS、Angular、Qwik、React Native、Next.js 等多个框架的 SDK(见 packages/sdks/README.md)。

从源码结构看,Content组件的核心实现位于 packages/sdks/src/components/content/content.lite.tsx,其类型定义在 packages/sdks/src/components/content/contentProps.types.ts。这些.lite.tsx文件就是 Mitosis 的框架无关源码,Svelte 版 SDK 是它的编译产物。

二、Feature Support:如何核对 SDK 功能状态

原文档明确说明:要查看该 SDK 的功能实现状态,请查看 Feature Implementation 表格。

该表格位于 packages/sdks/README.md 的 "# Feature Implementation" 一节,涵盖了各框架 SDK 的功能对比,包括:

  • Available Features:各 SDK 已实现的功能列表;
  • Builder Blocks:各框架可用的 Builder 基础块;
  • Builder Widgets:各框架可用的 Builder 小组件。

仓库目前持续为各 SDK 实现新功能,因此在使用前核对功能表是一个值得养成的习惯——尤其是当你依赖某个较新的 Builder 块(Block)或组件时,应以该表格为准确认 Svelte 版是否已支持。

三、快速开始:安装与最小示例

3.1 安装

SDK 的 npm 包名为@builder.io/sdk-svelte,在 Svelte 或 SvelteKit 项目中直接安装即可:

npm install @builder.io/sdk-svelte

从 packages/sdks/output/svelte/package.json 可以看到:

  • 当前版本号为5.2.11
  • 包类型为"type": "module",即 ESM 优先;
  • peerDependencies要求svelte: ^4.1.2(适用于 Svelte 4);
  • 运行时依赖仅isolated-vm: ^6.0.0(用于在服务端安全执行代码);
  • 开发依赖中包含@builder.io/sdks(workspace 内部共享源码包)与@sveltejs/kitvite等构建工具链。

3.2 多环境构建产物

该 SDK 通过svelte-package为三种运行环境分别打包(见 package.json 的scripts段):

构建目标命令产物目录适用场景
Browserbuild:browserlib/browser/浏览器端渲染
Nodebuild:nodelib/node/Node.js 服务端(SSR)
Edgebuild:edgelib/edge/边缘运行时(Deno、Bun、Cloudflare Workers、Netlify Edge 等)

包入口通过exports字段按运行环境自动分发:"svelte"/"browser"lib/browser/index.js"node"/"electron"lib/node/index.js"edge-routine""workerd""deno""lagon""netlify""edge-light""bun"等走lib/edge/index.js。这意味着同一个包可以在 SSR、静态生成和边缘函数等多种部署形态下工作。

注意:SDK 依赖isolated-vm来在 Node 服务端安全执行代码。在 Node v20 + Apple Silicon(M1)机器上存在兼容性问题,运行服务端时需要设置环境变量NODE_OPTIONS=--no-node-snapshot,否则 SDK 会跳过isolated-vm(详见 packages/sdks/README.md 的 "Node v20 + M1 Macs Support" 一节)。

四、Fetch 行为说明

原文档特别强调:该包使用fetch

在源码中,这一行为由 packages/sdks/src/functions/get-content/index.ts 实现:_fetchContent内部调用generateContentUrl(options)构造请求 URL,并通过options.fetch ?? fetch使用全局fetch发起请求(默认实现位于../get-fetch.js)。也就是说,SDK 没有内置自己的 HTTP 客户端,而是复用运行环境的标准fetch——这也解释了为什么它能在浏览器、Node 和边缘运行时之间无缝切换。

五、SvelteKit 集成实战

原文档指向官方示例仓库 examples/svelte/sveltekit,该示例完整演示了 SvelteKit 下如何接入 SDK。以下结合示例源码逐层拆解。

5.1 准备 API Key

在 examples/svelte/sveltekit/src/apiKey.js 中导出公开 API Key:

// TODO: enter your public API key export const BUILDER_PUBLIC_API_KEY = 'f1a790f8c3204b3b8c5c1795aeac4660'; // ggignore

操作流程(对应示例 README):

  1. 登录 Builder.io,从账户页面复制你的 API Key;
  2. 将其填入src/apiKey.js中的BUILDER_PUBLIC_API_KEY
  3. 打开 Builder.io Visual Editor,选择名为 "page" 的模型(model);
  4. 在编辑器右上角预览地址栏输入http://localhost:3000
  5. 在 Layers 面板中拖入组件,页面即会实时出现在编辑器中。

5.2 服务端加载内容(+page.server.js)

SvelteKit 的load函数在服务端运行,负责拉取 Builder 内容。示例位于 examples/svelte/sveltekit/src/routes/[...catchall]/+page.server.js:

import { fetchOneEntry, getBuilderSearchParams } from '@builder.io/sdk-svelte'; import { BUILDER_PUBLIC_API_KEY } from '../../apiKey'; /** @type {import('./$types').PageServerLoad} */ export async function load(event) { // fetch your Builder content const content = await fetchOneEntry({ model: 'page', apiKey: BUILDER_PUBLIC_API_KEY, options: getBuilderSearchParams(event.url.searchParams), userAttributes: { urlPath: event.url.pathname || '/' } }); return { content }; }

这里用到了两个核心 API:

  • fetchOneEntry(options):按条件获取单条 Builder 内容(model 匹配的第一条)。源码实现位于 packages/sdks/src/functions/get-content/index.ts,其内部实际是fetchEntries({ ...options, limit: 1 })的封装,取results数组的第一项,无结果时返回null
  • getBuilderSearchParams(url.searchParams):将 URL 查询参数转换为 SDK 请求参数。源码见 packages/sdks/src/functions/get-builder-search-params/index.ts,其注释明确提示:该函数一般并不需要,推荐改用isPreviewing()来判断是否处于预览模式(见下节);
  • userAttributes.urlPath:传入当前页面路径,用于 Builder 的个性化与目标匹配(Targeting)逻辑。

5.3 客户端渲染与自定义组件(+page.svelte)

页面组件位于 examples/svelte/sveltekit/src/routes/[...catchall]/+page.svelte:

<script> import Counter from '../../lib/Counter.svelte'; import { isPreviewing, Content } from '@builder.io/sdk-svelte'; import { BUILDER_PUBLIC_API_KEY } from '../../apiKey'; // Create an array of your custom components and their properties const CUSTOM_COMPONENTS = [ { component: Counter, name: 'Counter', inputs: [ { name: 'name', type: 'string', defaultValue: 'hello' }, { name: 'count', type: 'number', defaultValue: 0 } ] } ]; // this data comes from the function in `+page.server.js`, which runs on the server only export let data; // we want to show unpublished content when in preview mode. const canShowContent = data.content || isPreviewing(); </script> <main> <h1>Welcome to SvelteKit</h1> <div>Below is your Builder Content:</div> {#if canShowContent} <div>page Title: {data.content?.data?.title || 'Unpublished'}</div> <Content model="page" content={data.content} apiKey={BUILDER_PUBLIC_API_KEY} customComponents={CUSTOM_COMPONENTS} /> {:else} Content Not Found {/if} </main>

要点解析:

  1. Content组件是渲染入口,接收model(内容模型名)、content(服务端加载到的数据)、apiKey(公开 API Key)以及customComponents(自定义组件注册表)等 props;
  2. isPreviewing():当在 Builder.io 可视化编辑器中预览时返回true。这里用data.content || isPreviewing()的组合判断——发布内容用服务端数据,预览时则允许显示未发布内容;
  3. customComponents注册协议:每个自定义组件需要声明component(Svelte 组件本身)、name(在编辑器中显示的名称)和inputs(可编辑的属性列表,含nametypedefaultValue)。这样 Builder 编辑器就能识别并可视化编辑该组件;
  4. 自定义组件示例Counter.svelte位于 examples/svelte/sveltekit/src/lib/Counter.svelte,是一个带弹跳数字动画的计数器,其namecount两个属性正好对应上面的inputs注册。

5.4 运行与构建

示例 README 给出的命令:

# install dependencies npm install # serve with hot reload at localhost:3000 npm run dev # or start the server and open the app in a new browser tab npm run dev -- --open

生产构建与预览:

npm run build npm run preview

部署到不同平台时,可能需要为 SvelteKit 安装对应的 adapter 供参考。

六、从源码理解 SDK 的工作方式

虽然 Svelte 版 SDK 是编译产物(packages/sdks/output/svelte/目录下只有工程配置,实际源码由 Mitosis 从 packages/sdks/src 生成),但我们可以通过共享源码理解其内部原理:

  • 内容获取链路fetchOneEntryfetchEntries_fetchContentgenerateContentUrl+fetch,最终请求 Builder 的 Content Delivery API,返回BuilderContent结构(见 packages/sdks/src/functions/get-content/index.ts);
  • 测试保障:packages/sdks/src/functions/get-content/index.test.ts 对fetchEntries/fetchOneEntry的行为进行了单元测试,可作为理解参数语义的补充材料;
  • 内容渲染组件Content组件的 Mitosis 源码在 packages/sdks/src/components/content/content.lite.tsx,其 props 类型在 packages/sdks/src/components/content/contentProps.types.ts,想要深入了解可用属性时可查阅这两处。

七、小结

Builder.io Svelte SDK 以 Mitosis 单一源码为基础,为 Svelte 生态提供了与 React、Vue、Qwik 等框架对等的 Builder.io 内容渲染能力。通过npm install @builder.io/sdk-svelte即可接入,配合fetchOneEntry(服务端取数)、Content(渲染)、isPreviewing(预览模式)与customComponents(自定义组件注册)四个核心 API,即可在 SvelteKit 中完成从内容拉取到可视化编辑的完整闭环。功能支持状态、版本兼容性与 Node v20 环境注意事项,请以 Feature Implementation 表格 和 package.json 为准。

【免费下载链接】builderVisual Development for React, Vue, Svelte, Qwik, and more项目地址: https://gitcode.com/GitHub_Trending/bu/builder

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询