arch-web v2:我把那只赛博手办拆了重造

1566 字
8 分钟
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
  • 关标签页、刷新、明天再来——文件都在

预置了几个种子文件。打开终端试试:

Terminal window
ls /home/arch
cat /home/arch/readme.txt

readme 里第一行写的是”所有文件都存在浏览器本地”。它没有骗你,v2 的东西都不骗人,这是 v1 学不到的美德。

终端:40+ 条命令,真能用#

v1 的终端是”输入命令,显示预设输出”。v2 的终端是真的在虚拟文件系统上执行:

ls / cd / cat / cp / mv / rm / mkdir / touch
grep / find / head / tail / wc / tree / stat
echo / date / uname / hostname / neofetch
ps / top / free / df / du / uptime
pacman / 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 次实测(样本量:我)。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

arch-web v2:我把那只赛博手办拆了重造
https://www.cxl--package.top/posts/arch-web-v2-release/
作者
ALM
发布于
2026-09-13
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
ALM
Hi~欢迎来到CXL避难所
⚠️ 重要声明
大家好,这里是 CXL 避难所的站长——啊嘞喵。本站为个人非商业性质的学习分享站点,所有内容仅供技术交流与个人记录参考,不构成任何专业建议或商业指导。本站基于 Firefly 主题(MIT 开源协议)构建,与原作者无任何商业关联。引用内容版权归原作者所有,如有侵权请联系删除。
分类
标签
最新动态
站点统计
文章
27
动态
4
分类
8
标签
102
总字数
64,126
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Workers
博客版本
Firefly v6.14.3
文章许可
CC BY-NC-SA 4.0