跳转至

以下内容基本上是 AI 生成的,我还没校对,可能质量不高

Black Playground

一个基于 SvelteKit 和 Pyodide 的在线 Black 代码格式化工具。直接在浏览器里跑 Python,格式化你的代码,无需服务器。

Info

这是我用 Pyodide 把 Black 带到浏览器的一个小项目。灵感来自 José Padilla 的原版,但用 WASM 实现,让一切都在客户端完成。

功能

  • 输入 Python 代码,实时格式化输出
  • Monaco 编辑器,支持语法高亮和自动补全
  • 纯前端,无需上传代码到服务器

实现

用 SvelteKit 搭框架,Pyodide 加载 Black wheel,Monaco 做编辑器。Vite 打包,UnoCSS 样式。关键是 Pyodide 让浏览器能跑 Python,格式化直接在内存里完成。

深入洞见

仓库实现把 black 放在浏览器运行:src/lib/pyodide/init.py 通过 micropip.install('black') 把 Black 注入 Pyodide,并在 JS/TS 侧用 src/lib/format.ts 包装 pyodide callable(例如 black.format_str),这样 UI 层只需把源码交给 format 调用并显示结果。控件和缓存逻辑(format.ts)把 pyodide 调用做成单例/缓存,以降低 cold start 成本,使得浏览器端 format 成为可复用、低延迟的客户端服务。

参考源码:src/lib/pyodide/init.py · src/lib/format.ts · src/routes/+page.svelte

此外,项目还集成了 AI 代码再生成能力:Regenerate.svelte 负责交互入口,Settings.svelte 暴露 Black 的配置项。整体上把 Python 运行时初始化、格式化封装和 UI 组件拆开,既保留了纯前端格式化,也留出了继续扩展更多代码工具的空间。

我的巧思

  • 浏览器原生 Python:Pyodide 避开服务器成本和扩展问题。想象热重载 playground 会话?
  • 可配置:设置面板直接暴露 Black 选项,浏览器端格式化也能细调。
  • 可扩展:类似工具可以加更多 linter 或 formatter。

相关项目

试试看:https://black.py3.online