首页
/ Svelte 最低浏览器版本要求如何查:整体支持矩阵与特性例外表怎么看

Svelte 最低浏览器版本要求如何查:整体支持矩阵与特性例外表怎么看

2026-09-09 18:23:56作者:段琳惟

如果你的 Svelte 应用需要跑在客户或目标用户环境里,第一件事是确认目标浏览器版本是否达到 Svelte 的最低要求。Svelte 仓库在 Browser support 文档页 给出了两份表:一份是覆盖 Svelte 运行时的整体最低版本矩阵,另一份是少数需要更高版本浏览器的特性例外表。本文说明这两份表的位置、每格数值的含义,以及这些数字是如何自动生成、需要时如何重新生成的。

两个表在哪里

文档页 05-browser-support.md 本身只有几句说明,两张实际的数据表通过 @include 引入自 .generated/ 目录下的生成文件:

两个生成文件顶部都有注释 generated in packages/svelte/scripts/generate-browser-support.ts. do not edit,即表格由脚本生成、不允许手改。文档页同时说明了适用范围:这张表只覆盖 Svelte 本身,不包含 SvelteKit、其他 Svelte 库或你自己的代码。做兼容性判断时,如果项目用了 SvelteKit 或第三方 Svelte 库,需要另行核对它们各自的声明。

整体支持矩阵怎么读

文档页第一句说明:表中的最低版本是"derived from the browser APIs used by Svelte's internal code",即根据 Svelte 内部代码用到的浏览器 API 推导出来的。当前检出的表内容为:

Browser Minimum version
Chrome/Edge 87
Firefox 83
Safari 14
Opera 73
Opera (Android) 62
Samsung Internet 14.0
Android WebView 87
Internet Explorer not supported

读法上只有三点需要注意:

  1. 每个浏览器的值是"最低版本",低于该版本不做保证;
  2. Internet Explorer 一行是 not supported,属于明确不支持项,不是缺数据;
  3. 表尾注释 "This equates to a Baseline target of 2020",表示这组最低版本等价于 Baseline 2020 目标。判断某个目标环境是否达标时,按浏览器逐行对照即可。

特性例外表怎么读

文档页的 Exceptions 一节写明:"A few Svelte features require a higher minimum browser version. You'll only need to take the following table into consideration if you use these specific features."——只有当你的代码确实用到表中列出的特性时,才需要额外看这张表。当前检出的例外表:

Feature Chrome/Edge Firefox Safari
$state.snapshot 98 94 15.4
bind:devicePixelContentBoxSize 93 not supported
flip from svelte/animate 126

表中每个单元格的含义由生成逻辑决定(见 render_conditional_table):

  • 具体版本号:使用该特性时,对应浏览器的最低要求提高到该版本;
  • not supported:该浏览器任何版本都不支持该特性。例如 bind:devicePixelContentBoxSize 在 Safari 一栏如此标注,因为 Safari 从不暴露 ResizeObserverEntry.devicePixelContentBoxSize,该绑定在 Safari 上会读到 undefined
  • (灰色短横线):该特性在该浏览器上不需要高于整体矩阵的版本。例如 bind:devicePixelContentBoxSize 的 Chrome 一栏显示 ,是因为它依赖的 ResizeObserver 选项在 Chrome 84 起可用,低于整体下限 87,不构成额外要求。

三个特性对应的说明文档分别在 [02-state.mdstate.md 的 `state.snapshot` 一节](https://gitcode.com/GitHub_Trending/sv/svelte/blob/b2c22ab66d0978dfa14bb92196a6ab45ad0031a4/documentation/docs/02-runes/02-state.md?utmsource=gitcoderepofiles)[12bind.mdDimensions一节](https://gitcode.com/GitHubTrending/sv/svelte/blob/b2c22ab66d0978dfa14bb92196a6ab45ad0031a4/documentation/docs/03templatesyntax/12bind.md?utmsource=gitcoderepofiles)[svelte/animate参考页](https://gitcode.com/GitHubTrending/sv/svelte/blob/b2c22ab66d0978dfa14bb92196a6ab45ad0031a4/documentation/docs/98reference/21svelteanimate.md?utmsource=gitcoderepofiles)。所以例外表的使用流程是:先查整体矩阵,再检查代码里是否出现了state.md?utm_source=gitcode_repo_files)、[12-bind.md 的 Dimensions 一节](https://gitcode.com/GitHub_Trending/sv/svelte/blob/b2c22ab66d0978dfa14bb92196a6ab45ad0031a4/documentation/docs/03-template-syntax/12-bind.md?utm_source=gitcode_repo_files) 和 [svelte/animate 参考页](https://gitcode.com/GitHub_Trending/sv/svelte/blob/b2c22ab66d0978dfa14bb92196a6ab45ad0031a4/documentation/docs/98-reference/21-svelte-animate.md?utm_source=gitcode_repo_files)。所以例外表的使用流程是:先查整体矩阵,再检查代码里是否出现了 `state.snapshot`、`bind:devicePixelContentBoxSize` 或 `animate:flip`,出现哪个就把对应行的版本要求纳入你的最低版本判断。

表里的数字怎么来的

两份表都不是手写的,由 generate-browser-support.ts 重新生成,配套的检测逻辑在 browser-support.detector.js。脚本注释描述了完整管线:

  1. 用 rollup 以 production export 条件打包每个面向浏览器的运行时入口(Node-only 的 ./compiler./server./internal/server 子路径被排除),再用 TypeScript 编译器 API 走查产物,标记出用到的 web-features 特性 ID;
  2. 枚举所有面向用户的特性——每个 bind:*、每个公开子包的导出、编译器 RUNES 数组中的每个 rune,以及 transition:animate:use:{@attach}{@html}、custom elements 等指令的编译 fixture,逐个编译、打包、走查;
  3. 某个特性 fixture 的最低 Baseline 年份高于运行时整体下限时,才会在例外表中输出一行;
  4. 通过 web-features 数据把 Baseline 年份换算成各浏览器的具体版本号,缺少数据时回退到 baseline-browser-mapping 按年解析。

脚本中还有一组 BEHAVIORAL_IGNOREstructured-clone、CSS zoom 读取、device-pixel-content-box 选项),对应"运行时确实引用、但只有特定代码路径会走到"的 API——这些路径就是例外表存在的理由,并且脚本会校验这些条目仍然被检测器命中,防止配置过期。

重新生成表格并验证

如果你检出的仓库中运行时代码已变化、而文档表格可能滞后,可以在仓库的 packages/svelte 目录下运行文档记录的脚本(package.json 中的 generate:browser-support):

pnpm install
pnpm generate:browser-support

前提与副作用:该脚本会 import rollup、@rollup/plugin-virtual@rollup/plugin-node-resolveweb-featuresbaseline-browser-mapping 等依赖,所以需要先 pnpm install 装好工作区依赖;运行时会写入两个生成文件 browser-support.mdbrowser-support-features.md,并重建、清理脚本自建的 _baseline 临时目录。执行成功后控制台输出 Done.,此时再用 git diff 对照两个生成文件即可确认版本数字是否发生变化。

边界

  • 表格范围只有 Svelte 本身:SvelteKit、其他库和你自己的代码不在其中;
  • 例外表只列 Chrome/Edge、Firefox、Safari 三列,其他浏览器的特性例外不在这张表里;
  • 表头数字随 Svelte 运行时使用的 API 变化而可能变化,以你所用 Svelte 版本对应的仓库中生成文件为准,不要照抄本文中的具体版本号到别处长期复用。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.76 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
860
1.35 K
docsdocs
暂无描述
Markdown
899
5.83 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
925
1.85 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.84 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
533
601
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.03 K
525
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
395