单 package.json 多子路径导出:
svelte-libsvelte-lib/uisvelte-lib/usesvelte-lib/routesvelte-lib/builder其中:
src/ui/ 放可复用 Svelte 组件与图标src/use/ 放 hooks 与轻量工具src/route/ 放路由实现,对外通过 svelte-lib/route 暴露src/builder/ 放构建能力,对外通过 svelte-lib/builder 暴露作为本地依赖使用时,先在消费项目里安装:
bun add /._/svelte-lib
bun install
import { IconButton, setDarkTheme, setLightTheme } from "svelte-lib/ui";
import { Route } from "svelte-lib/route";
import { runConfiguredBuild } from "svelte-lib/builder";
setDarkTheme();
setLightTheme();
组合型 UI 组件现在默认按 snippet prop API 使用,组件内部统一按 runes-first 风格维护:
$props$state$derived$effect已维护的 UI 组件不再保留 export let 和 $: 这类旧语法。
示例:
<script lang="ts">
import { Block, FilledModal, StringInput } from "svelte-lib/ui";
</script>
<Block headerTitle="Profile" footerLeft="Tips">
{#snippet headerActions()}
<button type="button">Save</button>
{/snippet}
{#snippet children()}
<StringInput label="Name" value="Ada">
{#snippet left()}
<span>@</span>
{/snippet}
</StringInput>
{/snippet}
</Block>
<FilledModal active={true}>
{#snippet children()}
<div>Modal Content</div>
{/snippet}
</FilledModal>
组件内部事件处理也统一使用当前 Svelte 5 推荐的事件属性写法,例如 onclick={handleClick}、oninput={handleInput}。
svelte-lib 现在暴露两个独立可执行入口:svelte-build 和 svelte-dev。它们是否自动出现在 .bin/ 取决于消费项目的安装方式。
在真实 builder 项目里,最稳妥的调用方式是直接执行构建器命令行入口:
bun /._/svelte-lib/src/builder/build.ts
bun /._/svelte-lib/src/builder/dev.ts
当前源码仓库本身不是一个 builder app,根目录没有 builder.ts,因此不再提供 builder:build / builder:dev 根脚本。
如果你的包管理器已经正确把 bin 链接到项目里,也可以直接使用:
svelte-build
svelte-dev
当前仓库的测试布局规则是:
src/use/ 这类小而单一的 hook / 工具,测试默认贴源码放,例如 foo.ts 对应 foo.test.tssrc/ui/、src/route/、src/builder/ 这类需要 fixture、browser 条件、编译辅助或更复杂行为分层的模块,测试默认集中放在各自的 tests/ 目录;只有像 theme.ts 这种小而单一、无需共享测试基建的纯工具例外,才允许贴源码放tests/ 只保留仓库级、包级和公开 API 契约测试收口原则: