arch-web v2:我把那只赛博手办拆了重造
(`・ω・´)v2 重写完成报告
项目地址: 这次是 https://web.cxl—package.top/
**v1还是: https://cxl—package.top/
状态: 能跑,而且这次知道为什么能跑
三个月前我写了第一篇,主题是”我做了一个网页版的 Linux,说白了就是为了装 X”。那篇文章里有一个词我用了七次:大概。
这次重写,我把”大概”删掉了。
一、v1 到底怎么了?
先上坟,鞠躬,再说话。
| v1 罪状 | 具体表现 |
|---|---|
| 600+ npm 依赖 | 装个日历给你带上整个 Angular 的远房亲戚 |
| 假文件系统 | 文件管理器新建文件夹,刷新就没——浏览器版薛定谔 |
| 71 个应用组件 | 大部分是壳,图标是装饰,点开是空房间 |
| git 提交全是 “sync” | 三个月后回看历史:这是一坨什么?从哪来的? |
| 首次加载 1-3 分钟 | 泡茶文学,还记得吗 |
最致命的是最后两条加起来:代码烂 + 历史看不懂 = 不敢改。屎山的真正问题从来不是臭,是你不知道哪一铲子下去会塌。
所以 v2 的决定很简单:不是修,是重写。
二、v2 造了什么?
依赖:600 → 6
v1: 600+ 依赖,"这个库看起来有用"v2: 6 个运行时依赖: react / react-dom / zustand / clsx tailwind-merge / lucide-react
没了。真没了。Astro 5 做壳 + React 19 做交互 + Tailwind 4 做样式 + zustand 做状态。 就这四件套,撑起了整个桌面系统。以前那 594 个依赖并没有让项目更强,它们只是让
node_modules更像黑洞。
文件系统:这次是真的
v1 被吐槽最多的点。v2 直接接了浏览器原生存储:
- OPFS(Origin Private File System)做主力
- 浏览器不支持就自动降级 IndexedDB
- 关标签页、刷新、明天再来——文件都在
预置了几个种子文件。打开终端试试:
ls /home/archcat /home/arch/readme.txtreadme 里第一行写的是”所有文件都存在浏览器本地”。它没有骗你,v2 的东西都不骗人,这是 v1 学不到的美德。
终端:40+ 条命令,真能用
v1 的终端是”输入命令,显示预设输出”。v2 的终端是真的在虚拟文件系统上执行:
ls / cd / cat / cp / mv / rm / mkdir / touchgrep / find / head / tail / wc / tree / statecho / date / uname / hostname / neofetchps / top / free / df / du / uptimepacman / curl / man / history / which ...neofetch 还是显示预设信息(它不可能读你的 CPU,浏览器没这个权限,醒醒),但 ls 是真的在列你的文件,rm 是真的会删——删了记得 history 里找回来,哦不对,history 只记命令不记魂。
应用:12 → 34,而且没有壳
| 类型 | 应用 |
|---|---|
| 系统 | 终端、文件管理器、设置、任务管理器、系统监视器、磁盘用量 |
| 效率 | 记事本、便签、日历、时钟、计算器、Markdown 预览、剪贴板历史 |
| 工具 | JSON 工具、Base64、正则测试、颜色工具、单位换算、随机工具 |
| 媒体 | 网易云音乐、视频播放器、图库、相机、天气 |
| 游戏 | 2048、贪吃蛇、俄罗斯方块、扫雷、五子棋、打字测试 |
全部 34 个都接进了窗口系统:能拖、能缩放、能最小化、能切焦点。网易云音乐走 Meting API,支持歌单 / 单曲 / 搜索,多网关自动 fallback——对,一个网页里的”Linux”能听歌,比真的 Arch 装 netease-cloud-music 还顺利。
工程化:给自己留的后路
这次学乖了:
scripts/create-app.mjs脚手架,加新应用跑一条命令- 6 个 zustand store 各管各的:窗口、OS、剪贴板、通知、媒体、包管理
- git 提交全部语义化,三个月后回看历史,能看懂了
三、部署:还是白嫖
这次换了姿势:
- v1:Cloudflare Pages,构建缓存睡觉文学
- v2:Cloudflare Workers 静态资产,纯静态托管,配置就一个 wrangler.jsonc,指一下
dist目录完事
GitHub Actions 推上去自动构建部署,首次加载告别”泡一杯茶”,现在是”抿一口”的程度。
服务器?还是不存在的。这辈子都不可能租服务器的。
四、FAQ(v2 版)
Q: 和 v1 比最大的区别是什么? A: v1 是”看起来像 Arch 的网页”,v2 是”跑在你浏览器存储上的桌面系统”。一个骗眼睛,一个骗 localStorage——不对,OPFS。
Q: 文件真的不会丢吗? A: OPFS 是浏览器原生的持久存储,你不清浏览器数据它就在。但你要是手贱清了站点数据,那属于天灾,不赔。
Q: 还会加载 3 分钟吗? A: 不会了。6 个依赖的项目想慢都难。
Q: 终端能 sudo rm -rf / 吗?
A: 可以试试。反正删的是你自己浏览器里的种子文件,删完 readme 就没了,痛心吗?
Q: 为什么重写而不是重构? A: 因为重构屎山的前提是你记得当初为什么这么写。而 v1 的提交历史只有两个字:sync。
Q: 有 GitHub 吗? A: 有,PAleimiao/arch-web-v2。这次提交历史是给人看的,欢迎参观。
五、致谢
- zustand:让我明白状态管理可以不需要 Redux 那套婚礼流程
- OPFS:给了网页一个真正的文件系统,虽然名字拗口得像饿了么会员等级
- Cloudflare Workers:继续免费,继续白嫖,一次都没睡觉
- Riko(莉子): 26% 的代码,顺带骂骂咧咧的一起找公开的API接口
- v1 的屎山:虽已火化,但它教会了我什么不该做——这是它能提供的全部价值
六、结语
v1 那篇的结尾说,那是一个”赛博手办”。
v2 的定位换了个说法:一个跑在浏览器里的、文件真的能存下来的、终端真的能用的桌面环境。
它依然不能替代真的 Arch。你依然不能在里面 pacman -Syu 更新出什么新世界。
但当你新建一个文件、关掉标签页、第二天打开发现它还在的那一刻——
(`・ω・´)b 这玩意儿,是活的。
毕竟,装 X 也要装得有持久化。
如果你打开链接发现页面是白的——先刷新,v2 的白屏率是 0 次实测(样本量:我)。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
welcome to CXL


















