@evidence-dev/sdk

中文文档
4.0.2发布于 2026/02/07MITTypeScriptESM + CJS近 30 天下载 9.4万
evidence-logo
中文使用文档
文档目录6 节
  1. 如何运作
  2. 安装
  3. 使用量
  4. 使用 <code/>
  5. 使用 runQuery
  6. 启用安全部门改革
evidence-logo

证据 SDK

构建高度互动的数据应用程序的最快方式

GitHub Repo stars NPM NPM Version (with dist tag) Join Slack

此文档尚未为 SDK 的最新版本更新

如何运作

"证据SDK"包含了构建交互式数据应用程序所需的所有工具,从数据库一直到浏览器.

  • 数据源连接器 - 连接各种数据ours的插件,包括数据库、API、平板文件等
  • 在浏览器中运行查询 - 通用 SQL 是使用 DuckDB WASM 和您的数据库最快的方法

安装

  1. 如果需要, 请创建您的 SvelteKit 工程( 例如 ) . npm create svelte(中文(简体) )
  2. 安装 SDK npm i @evidence-dev/sdk@preview
  3. 使用 SDK 添加到您的项目中 npx evidence-sdk add
  4. 使用 npx evidence-sdk plugins install 如果您没有安装插件 add
    5. 如果您想要使用的数据源没有列出,并且有一个证据插件,您可以安装软件包并添加到 evidence.config.yaml 手动.
  5. 创建新连接 npx evidence-sdk connections edit
    1. 连接一旦建立,将出现新的 sources/[connection] 目录,对于大多数连接器,您需要创建一些源查询.
  6. 用 npx evidence-sdk sources

使用量

见 维基百科

使用证据SDK执行查询有两种方法 <code/> 要素,和呼叫 runQuery 直接说. <code/> 元素自动将其结果提供给儿童组件(或页面,如果在布局中使用),同时 runQuery 将查询范围保留到当前页面.

使用 <code/>

写入查询

要在页面上添加查询,请使用 <code/> 元素,带有 evidence-query-name 属性( e)lang=sql 可选但建议).

把它包起来 <pre> 标签将防止格式化者更改您的 SQL .

示例

<pre><code evidence-query-name="myFirstQuery" lang="sql">
SELECT * FROM my_first_table
</code></pre>

使用时 <code/>,您可以使用 模板字符串语法,斯维尔特语法不支持.

工作示例:

<pre><code evidence-query-name="myFirstQuery" lang="sql">
SELECT * FROM my_first_table WHERE user_id = '${selectedUserId}'
</code></pre>

断开的示例 :

<pre><code evidence-query-name="myFirstQuery" lang="sql">
SELECT * FROM my_first_table WHERE user_id = '{selectedUserId}'
</code></pre>

访问查询

要装入放置在页面上的查询,请创建查询存储的引用 $evidence/queries

<script>
    import { getQueries } from '$evidence/queries';
    const queries = getQueries();
    /** @type {import("@evidence-dev/query-store").QueryStore} */
    let { myFirstQuery } = $queries;
    $: ({ myFirstQuery } = $queries);
</script>

$queries 是一组 QueryStore 根据网页上提供的内容.

完整示例

<script>
    import { getQueries } from '$evidence/queries';
    const queries = getQueries();
    /** @type {import("@evidence-dev/query-store").QueryStore} */
    let { myFirstQuery } = $queries;
    $: ({ myFirstQuery } = $queries);
</script>

<pre><code evidence-query-name="myFirstQuery" lang="sql">
SELECT * FROM my_first_table
</code></pre>

{#if !$myFirstQuery.loaded}
    <!-- 
        The query has not yet loaded.
        $myFirstQuery.loading is also available, 
        but will be false if the store has not yet started to load.

        QueryStore should begin loading automatically when attempting to access data,
        but can be induced with .fetch()
     -->
    Loading...
{:else if $myFirstQuery.error}
    <!-- An error has been encountered -->
    Error: {$myFirstQuery.error.message}
{:else}
    <!-- Results have been loaded -->
    {#each $myFirstQuery as row (row.id)}
        Row ID: {row.id}
    {:else}
        No resuls available
    {/each}
{/if}

使用 runQuery

完整示例

<script>
    import { runQuery } from '$evidence/queries';

    const myFirstQuery = runQuery('myFirstQuery', 'SELECT 1');
    myFirstQuery.fetch(); // This is not done for you when using runQuery

    // Queries can by dynamic
    let x = 0;
    // declare here to ensure it is defined
    let dynamicQuery = runQuery('dynamicQuery', `SELECT ${x}`);
    // react to updates in the query string
    $: dynamicQuery = runQuery('dynamicQuery', `SELECT ${x}`);
    $: dynamicQuery.fetch();
</script>

<!-- Usage is the exact same as above -->
{#if !$myFirstQuery.loaded}
    <!-- 
        The query has not yet loaded.
        $myFirstQuery.loading is also available, 
        but will be false if the store has not yet started to load.

        QueryStore should begin loading automatically when attempting to access data,
        but can be induced with .fetch()
     -->
    Loading...
{:else if $myFirstQuery.error}
    <!-- An error has been encountered -->
    Error: {$myFirstQuery.error.message}
{:else}
    <!-- Results have been loaded -->
    {#each $myFirstQuery as row (row.id)}
        Row ID: {row.id}
    {:else}
        No resuls available
    {/each}
{/if}

启用安全部门改革

如果你正在使用 <code/> 方法,你只需要确保安装服务器钩子.

如果你正在使用 runQuery 方法,您需要使用 <QuerySSR/> 组件.

配置 SSR 虎克

  1. 确保您拥有 ./src/hooks.server.[js|ts] 文件

  2. 创建或更新 handle 函数以匹配 :

    • 要创建 :
    import { ssrHook } from '$evidence/ssrHook.svelte.js';
    
    /** @type {import('@sveltejs/kit').Handle} */
    export async function handle({ event, resolve }) {
     /** @type {{ name: string, queryString: string}[]} */
     const presentQueries = [];
     const response = await resolve(event, {
         transformPageChunk: ssrHook(presentQueries)
     });
     return response;
    }
    
    • 如果您已经使用 resolve 财务报告和审定财务报表 transformPageChunk,您可以链接到这样的函数:
    import { ssrHook } from '$evidence/ssrHook.svelte.js';
    
    /** @type {import('@sveltejs/kit').Handle} */
    export async function handle({ event, resolve }) {
        /** @type {{ name: string, queryString: string}[]} */
        const presentQueries = []
        const evidenceChunkTransform = ssrHook(presentQueries)
    
        const response = await resolve(event, {
            transformPageChunk: ({html, done}) => {
                // ... Do something to html
                html = await evidenceChunkTransform({ html, done })
                // ... Do other things to html
                return html
        });
        return response;
    }
    

使用 <QuerySSR/>

<QuerySSR/> 向证据预处理器登记您的询问,从而可以正确补水.

<script>
    import { runQuery } from '$evidence/queries';
    import QuerySSR from '$evidence/QuerySSR.svelte';

    let manualQuery = runQuery('x', `SELECT * FROM users`);
    $: manualQuery = runQuery('x', `SELECT * FROM users`);
</script>

<QuerySSR queries={[manualQuery]} />

版本与发布记录

@evidence-dev/sdk 共发布 85 个版本,首次发布于 2024/01/19;过去 12 个月发布了 2 个版本。

版本发布日期距今
4.0.2latest2026/02/079 个月前
4.0.02025/11/1511 个月前
3.0.102025/11/051 年前
3.0.92025/02/141.7 年前
3.0.82025/02/071.8 年前
3.0.72025/02/041.8 年前

其他发布通道:preview → 0.0.1,next → 0.0.0-52469075,features-b → 1.2.3-features-b.0,dropdown-preview → 1.3.9-dropdown-preview.0。

关于 @evidence-dev/sdk 的常见问题

如何安装 @evidence-dev/sdk?

在项目目录运行 npm install @evidence-dev/sdk,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:nanoid(3.3.8)、perfect-debounce(^1.0.0)、@evidence-dev/universal-sql(3.0.1)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 evidence-sdk,可以用 npx evidence-sdk 直接运行。

@evidence-dev/sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@evidence-dev/sdk 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@evidence-dev/sdk 可以商用吗?

@evidence-dev/sdk 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@evidence-dev/sdk 的下载量有多少?

根据 npm 官方下载统计,@evidence-dev/sdk 在 2026/10/14 – 2026/11/12 这 30 天内被下载 93,639 次,日均约 3,121 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@evidence-dev/sdk 还在维护吗?

最新版本 4.0.2 发布于 2026/02/07(9 个月前);至今共发布 85 个版本,其中过去 12 个月发布了 2 个;首次发布于 2024/01/19。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。