@desource/image-svelte

中文文档
0.5.0发布于 2026/11/01MITTypeScriptES Module构建来源已验证近 30 天下载 1.7万

Svelte和SvelteKit的高质量图像优化,具有响应性输出,部署意识提供者选择,数十个内置提供者模块,以及IPX.

中文使用文档
文档目录19 节
  1. 为什么Svelte的Desource图像?
  2. 如何比较
  3. 安装
  4. 配置斯维尔特基特
  5. Dsimage 组件
  6. DsPicture 组件
  7. 自定义渲染片段
  8. 为本地要素采取的行动
  9. Svelte 5.29+附件
  10. 一次绑入一个配置
  11. SSR 道具助手
  12. 响应图像、占位符和预装
  13. 可调用图像助手
  14. 供应商和预设
  15. 生产部署
  16. Vercel 本地图像
  17. 生产 IPX 的 SvelteKit
  18. 链接
  19. 许可证

来源图像
Svelte 和 SvelteKit 优化图像

Svelte和SvelteKit的高质量图像优化,具有响应性,供应商第一和SSR友好的工作流程.

npm version Coverage SonarCloud Ask Context7 Ask DeepWiki MIT license

AI协助开发将想法迅速转移到工作产品. DeSource Image将图像准备保留在该开发回路内. 添加一个合适的本地或远程源,然后用组件道具控制其输出.

保留 /img/hero.jpg 而不是导出 hero-480.webp, (中文(简体) ), hero-960.webp,以及 hero-1600.webp。DeSource Image 将一个图像输入到提供者 URL,响应 srcset, (中文(简体) ), <picture> 源,占位符,预装元数据,预设,别名,源验证,以及本地IPX路由.

对于MVP和日常产品开发,图像质量成为了代码编辑. 变动 quality={80} 改为 quality={65} 并保留相同的源文件、组件和 URL.

@desource/image-svelte 使本地图像标记不包含包装元素,并提供组件,动作,Svelte 5.29+附件,SSR道具帮助器,Vite dev/preview中间软件,以及生产服务器处理器. 本地路径和动态URL使用相同的组件 API.

提供者配置是可选的 。 在Vercel,Netlify,或AWS Amplify上,DeSource图像从部署环境中选择平台图像服务. 在其它任何地方,它会倒回内置的IPX路径. 明确提供商总是赢.

套件在使用附件时需要Svelte 5.29或更新. 部件和行动需要Svelte 5.

为什么Svelte的Desource图像?

斯维尔特基特的 @sveltejs/enhanced-img 是一个用于导入本地文件的强大的构建时间工具。 DeSource Image按需要转换本地图像并接受来自一个CMS,数据库,API,对象商店,CDN,或用户通过同一组件API上传的源.

  • 已建成快速产品迭代. 改变斯维尔特的图像质量,格式,裁剪,或响应大小. 源文件和文件名保持不变.
  • 本地和动态来源. 使用本地路径, CMS 响应, 数据库值, API 结果, 对象存储 URL, CDN URL, 或者用户上传相同组件道具.
  • 部署意识提供者选择. 离开 provider 打开 auto. DeSource Image可探测Vercel,Netlify,或AWS 放大并用于本地环境或其他环境.
  • 原生框架 API. 使用组件,动作,Svelte 5附件,片段,或SSR道具帮助器. 产出仍属本地 <img> 财务报告和审定财务报表 <picture> 标记.
  • 数十个内置供应商模块. 导入一个提供者子路径, 使用完整的注册, 或注册一个输入的自定义提供者 .
  • 内建局部优化器. Vite中相软件和SvelteKit服务器处理器可以在没有单独图像服务的情况下服务IPX转换.
  • 反应图像和现代格式. 生成宽度或密度候选人, 断点意识 sizes,命令 AVIF/WebP 源头,以及倒置图像.

如何比较

选项最适合如何选择优化选择来源图像时
@sveltejs/enhanced-img在Vite建造期间改变的静态当地资产图像在构建时处理. 部署目标不会将其切换到运行时间图像服务.您希望本地图像按需转换以节省时间 。 您的图像来自 CMS, 数据库, API, 对象商店, 或 CDN, 或者同一源码应该在当地使用 IPX , 而部署平台的优化器在生产中 .
无相斯维尔特在可识别的 CDN 或 CMS URL 上已托管的跨框架响应图像检测每个提供者 src URL (中文(简体) ). 本地或未知来源需要倒置或明示提供者;部署本身不是选择信号.Vercel, Netlify, 或 AWS Amplify 应为每个源选择优化器, 包括相对路径, 您还需要预设, 化名, 源规则, <picture>,或服务器适配器.

使用 enhanced:img 当每个图像在构建时间被导入时, 您想要在构建期间生产的所有变体, 没有运行时间优化器 。 为按需转换的本地图像选择DeSource图像,动态源,或者在部署后进行优化.

安装

npm install @desource/image-svelte

安装 ipx 当应用程序服务于本地时 /_ipx 开发、预览或生产中的转换:

npm install ipx

保留 ipx 在使用生产服务器适配器时生产依赖性。 当每个图像使用主机提供者时是可选的. 添加 @desource/image (a) 只有在申请提供商从它进口工厂或公用事业时,才构成直接依赖.

配置斯维尔特基特

安装后添加 Vite 集成 ipx数字 :

// vite.config.ts
import { dsImage } from '@desource/image-svelte/vite';
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';

export default defineConfig({
  plugins: [dsImage({ dirs: ['static'] }), sveltekit()]
});

插件服务 /_ipx 中。 它还能将检测到的提供者烘烤成客户端和服务器捆绑,使水分使用同一种提供者.

当需要默认、预设、别名或验证规则时,在根布局中设定共享配置:

<!-- src/routes/+layout.svelte -->
<script lang="ts">
  import { setDsImageConfig } from '@desource/image-svelte';
  import { cloudinaryProvider } from '@desource/image/providers/cloudinary';

  setDsImageConfig({
    provider: 'cloudinary',
    quality: 80,
    screens: { sm: 640, md: 768, lg: 1024 },
    domains: ['images.example.com'],
    providers: {
      cloudinary: cloudinaryProvider({ cloudName: 'demo' })
    },
    presets: {
      avatar: { width: 96, height: 96, fit: 'cover', format: 'webp' }
    }
  });

  let { children } = $props();
</script>

{@render children()}

配置通过斯维尔特上下文继承,每配置对象一次解决. 在没有明确提供者的情况下,共享运行时间从构建环境检测出Vercel,Netlify,或AWS Amplify,并倒回IPX.

Dsimage 组件

<script lang="ts">
  import { DsImage } from '@desource/image-svelte';

  let loaded = $state(false);
</script>

<DsImage
  src="/img/hero.jpg"
  alt="Aurora above a mountain lake"
  width={1600}
  height={900}
  sizes="100vw md:50vw lg:800px"
  format="webp"
  quality={82}
  placeholder
  preload={{ fetchPriority: 'high' }}
  class="hero"
  onload={() => (loaded = true)}
/>

alt 需要时间。 原生图像属性和斯维尔特事件属性通过生成 <img>。 。 。 .

DsPicture 组件

<script lang="ts">
  import { DsPicture } from '@desource/image-svelte';
</script>

<DsPicture
  src="/img/hero.jpg"
  alt="Responsive mountain landscape"
  width={1600}
  height={900}
  sizes="100vw md:50vw lg:800px"
  formats={['avif', 'webp']}
  fallbackFormat="jpg"
  class="hero-frame"
  imgAttrs={{ class: 'hero' }}
/>

这让本地人 <picture>, (中文(简体) ), <source>,以及 <img> 要素。 逗号分隔 format="avif,webp"数组 format,则 legacyFormat 支持别名.

自定义渲染片段

使用 custom 与 children 当图像需要自定义标记的同时保留生成的属性和占位符状态时片断 :

<DsImage src="/img/hero.jpg" alt="Hero" width={1200} placeholder custom>
  {#snippet children({ imgAttrs, src, isLoaded })}
    <figure data-src={src} data-loaded={isLoaded}>
      <img {...imgAttrs} />
      <figcaption>Mountain lake</figcaption>
    </figure>
  {/snippet}
</DsImage>

为本地要素采取的行动

动作对常态元素提供相同的反应行为:

<script lang="ts">
  import { dsImageAction, dsPictureAction } from '@desource/image-svelte';

  let width = $state(720);
  const imageOptions = $derived({
    src: '/img/card.jpg',
    alt: 'A coastal village',
    width,
    height: 480,
    densities: '1x 2x',
    placeholder: true
  });
</script>

<img alt="A coastal village" use:dsImageAction={imageOptions} />

<picture
  use:dsPictureAction={{
    src: '/img/card.jpg',
    alt: 'A coastal village at sunset',
    width,
    height: 480,
    formats: ['avif', 'webp']
  }}
>
  <img alt="A coastal village at sunset" />
</picture>

图片动作需要回落一次 <img> 并管理生成 <source> 周围的元素.

Svelte 5.29+附件

附件以斯维尔特更新的元素生命周期 API 曝光了同一引擎:

<script lang="ts">
  import { dsImageAttachment, dsPictureAttachment } from '@desource/image-svelte';
</script>

<img
  alt="Mountain lake"
  {@attach dsImageAttachment({
    src: '/img/hero.jpg',
    alt: 'Mountain lake',
    width: 960,
    format: 'webp'
  })}
/>

<picture
  {@attach dsPictureAttachment({
    src: '/img/hero.jpg',
    alt: 'Mountain lake',
    width: 960,
    formats: ['avif', 'webp']
  })}
>
  <img alt="Mountain lake" />
</picture>

动作和附件支持更新、加载/反调、占位符解码、分类清理和 onStateChange。 。 。 .

一次绑入一个配置

使用 createDsImageBindings() 当多个本地元素共享一个明确的配置时:

<script lang="ts">
  import { createDsImageBindings, createDsImageConfig } from '@desource/image-svelte';

  const config = createDsImageConfig({ provider: 'ipx' });
  const { dsImageAction, dsImageAttachment, dsPictureAction, dsPictureAttachment } = createDsImageBindings(config);
</script>

返回的职能不再需要 config 字段中的每个选项对象.

SSR 道具助手

getDsImageProps() 财务报告和审定财务报表 getDsPictureProps() 生成未安装组件的已键入的本地属性。 它们在片段、安全部门改革产出和一体化方面是有用的:

import { getDsImageProps, getDsPictureProps } from '@desource/image-svelte';

const image = getDsImageProps({
  src: '/img/hero.jpg',
  alt: 'Hero',
  width: 800,
  format: 'webp'
});

const picture = getDsPictureProps({
  src: '/img/hero.jpg',
  alt: 'Hero',
  width: 800,
  formats: ['avif', 'webp']
});

过 true 当完整图像已装入且配置了占位符时,应当跳过第二个参数.

响应图像、占位符和预装

sizes 接受断点字符串, 如 100vw sm:50vw lg:600px 或记录. densities 接受字符串、数字或数组。 被选中的供应商的候选宽度被简化并正常化.

<DsImage src="/img/hero.jpg" alt="Hero" width={1200} placeholder placeholderClass="blur" />
<DsImage src="/img/hero.jpg" alt="Hero" width={1200} placeholder={[48, 32, 25, 8]} />
<DsImage src="/img/hero.jpg" alt="Hero" width={1200} placeholder="data:image/png;base64,..." />
  • 布尔占位符生成一个小的被转换的图像.
  • 拖倒控制了宽度、高度、质量和模糊度.
  • 完整图像仅在解码成功后替换占位符.
  • placeholderClass 仅存在于占位符可见时.
  • preload 插入响应 <link rel="preload" as="image"> 输入标题和引用计数重复链接.
  • priority 设置急速装入和高优先级。 使用 preload 当需要头链接时.

安全部门改革和初步水合产出是决定性的.

可调用图像助手

<script lang="ts">
  import { useDsImage } from '@desource/image-svelte';

  const $img = useDsImage();
  const hero = $img('/img/hero.jpg', { width: 800, format: 'webp', quality: 75 });
</script>

可调用帮助者暴露 getImage, (中文(简体) ), getSizes, (中文(简体) ), getMeta, (中文(简体) ), getAttrs, (中文(简体) ), getPicture, (中文(简体) ), getPreloadLink,并配置了预设快捷键.

供应商和预设

在共享配置中注册内置或自定义提供者 :

<script lang="ts">
  import { cloudinaryProvider } from '@desource/image/providers/cloudinary';
  import { setDsImageConfig } from '@desource/image-svelte';

  setDsImageConfig({
    provider: 'cloudinary',
    providers: {
      cloudinary: cloudinaryProvider({ cloudName: 'demo' })
    },
    presets: {
      avatar: { width: 96, height: 96, fit: 'cover', quality: 80 }
    }
  });
</script>
<DsImage preset="avatar" src="/users/ada.jpg" alt="Ada" />

供应商模块和定制供应商公用事业记录如下: @desource/image。 。 。 .

生产部署

Vite插件只向Vite开发和预览服务器提供最优化的中间软件. 生产必须使用平台图像端点或安装IPX服务器适配器.

Vercel 本地图像

配置 @sveltejs/adapter-vercel 因此它的构建输出 API 包含图像设置 :

// svelte.config.js
import adapter from '@sveltejs/adapter-vercel';

export default {
  kit: {
    adapter: adapter({
      images: {
        sizes: [640, 768, 1024, 1280, 1536],
        domains: ['images.example.com'],
        minimumCacheTTL: 2678400,
        formats: ['image/avif', 'image/webp'],
        dangerouslyAllowSVG: false
      }
    })
  }
};

在Vercel上建造时,自动检测发射 /_vercel/image URLs (英语). 保持适配器图像大小并允许与应用程序配置相匹配的远程域.

生产 IPX 的 SvelteKit

安装 ipx 作为生产依赖并添加服务器钩:

// src/hooks.server.ts
import { createDsImageHandle } from '@desource/image-svelte/server';

export const handle = createDsImageHandle({
  dirs: ['static'],
  domains: ['images.example.com'],
  maxAge: 60 * 60 * 24 * 30
});

createDsImageWebHandler() 可用于其他获取 API 服务器,以及 createDsImageNodeMiddleware() 用于连接/Express风格的节点服务器.

所有IPX适配器都以懒散的方式加载优化器,只在所配置的路径下处理请求. 远程优化默认被拒绝 。 添加可信赖 domains,或设置 allowAllDomains: true 仅供有意公开优化者使用.

许可证

麻省理工学院,2026年

版本与发布记录

@desource/image-svelte 共发布 6 个版本,首次发布于 2026/09/07;过去 12 个月发布了 6 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.5.0latest2026/11/0111 天前
0.4.02026/10/111 个月前
0.3.12026/10/011 个月前
0.3.02026/09/181 个月前
0.2.02026/09/151 个月前
0.1.02026/09/072 个月前

关于 @desource/image-svelte 的常见问题

@desource/image-svelte 是什么?

Svelte和SvelteKit的高质量图像优化,具有响应性输出,部署意识提供者选择,数十个内置提供者模块,以及IPX.

如何安装 @desource/image-svelte?

在项目目录运行 npm install @desource/image-svelte,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:svelte(^5.29.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@desource/image-svelte 支持 TypeScript 吗?

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

@desource/image-svelte 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@desource/image-svelte 可以商用吗?

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

@desource/image-svelte 的下载量有多少?

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

@desource/image-svelte 还在维护吗?

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