TypeScript 与 Svelte 格式化如何提速?认识 Rust 工具链 tsv
前端项目的格式化工具往往处在开发循环的最前面:保存文件触发格式化,提交前再跑一遍检查。工具链越重、支持范围越宽,配置和运行成本也可能随之增加。开源项目 tsv 选择了一条更聚焦的路线:用 Rust 实现面向 TypeScript/JavaScript、CSS 和 Svelte 的解析器与格式化器,并通过 npm 提供原生 Node/Bun 包和 WebAssembly 版本。
它不是「另一个覆盖所有前端语法的统一平台」,而是试图把特定语言范围内的工具做得紧凑、快速且贴近规范。理解它的边界,比只看速度宣传更重要。
tsv 包含什么
项目目前提供 TypeScript/JavaScript、CSS 与 Svelte 的解析能力,以及遵循 Prettier 与 prettier-plugin-svelte 风格的格式化器。README 将状态描述为接近可用于生产,但仍有少量长尾缺陷,API 也可能变化。格式化样式是固定的:不提供自定义风格配置,默认设定参考 Svelte 官方仓库的 Prettier 配置。
这种取舍能减少配置分歧,也意味着它不适合需要逐项复刻团队 Prettier 选项的项目。tsv 明确不支持 JSX/TSX、Vue、Astro、SCSS 等范围;项目资料把部分转换、HTML/JSON 支持以及编译器方向列为未完成或未来设想,不能当作当前已交付功能。
在项目中试用
README 给出的安装方式是把 npm 包作为开发依赖,并通过 npx 调用 CLI:
npm i -D @fuzdev/tsv npx tsv format src
如果只想快速试用,也可以不先写入项目依赖:
npx @fuzdev/tsv format src
以上是 README 展示的基本调用;真正接入团队前,建议先确认 CLI 文档中的参数和文件发现规则,再在一个小目录试跑。项目说明 tsv format 会识别 .gitignore、.prettierignore 和它自己的 .formatignore,三者都使用 gitignore 风格的匹配语法。先拿少量文件验证忽略规则,可避免首次运行意外改动生成目录或不应格式化的文件。
如果应用代码需要直接调用解析器或格式化器,npm 包也提供 JavaScript API:
import {format_svelte, parse_svelte} from '@fuzdev/tsv';
const source = '<script>\nconst count=1\n</script>';
const formatted = format_svelte(source);
const ast = parse_svelte(source);
这里演示的是 README 明确列出的导出名称;格式化结果会按项目固定风格输出,解析结果则是 Svelte AST。项目说明其公开 JSON AST 的目标是兼容现代 Svelte 5 AST 形态,但也注明存在差异和修复项,应以对应的 conformance 文档为准,而不是假定与上游在所有边界条件上完全一致。
如何选择发布形态
@fuzdev/tsv 是面向 Node/Bun 的原生 N-API 包,包含 CLI 和解析、格式化能力;README 还列出完整 WASM 包,以及体积更小的 formatter-only 和 parser-only WASM 包。原生预编译包列出的平台包括 Linux x64(GNU 与 musl)、Linux arm64 GNU、macOS x64/arm64 和 Windows x64。浏览器与部分无预编译原生二进制的平台可考虑 WASM 版本;浏览器调用前需要执行初始化。
项目也在 GitHub Release 附上对应平台的 CLI 二进制和 SHA256SUMS,并为发布资产提供构建来源证明。若团队不希望通过 npm 安装,可以评估直接使用发行资产;但在自动更新或供应链审核流程中,仍应按项目文档验证校验和及 attestation,而不是只下载后直接执行。
适合谁,暂时不适合谁
如果项目主要使用 TypeScript、JavaScript、CSS 或 Svelte,并希望尝试一个无需 JavaScript 运行时即可运行的原生格式化器,tsv 值得在隔离分支中评估。它的单一格式策略适合希望减少配置争论的团队;Svelte 解析器与格式化器则让它不只是一个普通 JS 文件格式化命令。
反过来,如果仓库依赖 JSX/TSX、Vue、Astro、SCSS,或团队需要严格保留既有 Prettier 配置,就不应把它当作直接替换品。即使只使用其覆盖的语法,也应检查格式差异、插件依赖、编辑器保存行为和 CI 输出。README 提供与 Oxc/Oxfmt、Biome 的基准入口,同时提醒比较范围和功能并不相同;基准结果应结合测试版本、硬件与实际语言覆盖阅读,不能简单归纳成「全面更快」。
结语
tsv 的价值在于范围明确:Rust 实现、TypeScript/JavaScript、CSS 与 Svelte、原生与 WASM 发布形态,以及不支持自定义格式选项的明确立场。它把选择题从「哪个工具功能最多」变成「我是否愿意用更窄的语言覆盖换取更专注的工具链」。先用真实仓库的代表性文件做试点,再依据格式差异、运行环境和团队配置要求决定是否采用,比只看 benchmark 数字稳妥得多。
相关链接