单 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 installimport { 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 契约测试
收口原则:
- 默认就近
- 为边界拆分,不为形式拆分
- 只有在环境、契约层级或行为边界明显独立时,才额外建立单独测试文件