记录一个 Next.js 16 monorepo 从 npm 和 Node.js 完整迁移到 Bun 1.4 的过程,覆盖 workspace、开发与构建脚本、bun:test、standalone tracing、Docker 镜像和生产冒烟验证。
用一个 catch-all Route Handler 让 Hono 接管 Next.js 的健康检查、搜索、附件和 MCP API,解释为什么这里直接调用 app.fetch,而不是使用 hono/bun 启动第二个服务器,并为本地文件与对象存储保留替换边界。
从 Linux PID 1 的特殊行为解释 tini 如何转发 SIGTERM、回收僵尸进程并传递子进程退出码,同时区分 exec form、docker run --init 与镜像内置 ENTRYPOINT 的使用边界,回答单进程 Bun 容器是否仍值得保留它。
在同一台电脑、同一份 Next.js standalone 产物和相同访问日志条件下,对比 Bun 1.4 与 Node.js 24 的吞吐量、p99、容器内存和镜像大小,并逐级加压直到延迟超过 1 秒,同时记录重定向与 SIGTERM 对测试结果的干扰。
用 autocannon 的程序化 API 对本地 Web 服务进行多页面轮询和阶梯加压,说明 connections、duration、pipelining、p99 与错误统计,并配合 docker stats 找到延迟拐点,避免只看单次峰值和平均吞吐量。
记录我在 2 核 2G Linux 云服务器上长期使用的内存配置:系统初始 vm.swappiness=0,启用 zram0 并调整换页倾向,再创建低优先级磁盘 swapfile 兜底。结合多年运行个人服务的经历,说明这种默认值为何让小内存实例更快暴露压力,以及 zram 容量、优先级和验证方法。
解释 Git for Windows 为什么默认启用 core.autocrlf、true、input 与 false 分别会怎样处理工作区和索引中的换行符,并给出适合跨平台项目的 .gitattributes、EditorConfig、配置层级检查和已有文件规范化方法。
记录 Oxfmt 接入 TypeScript 项目时容易踩到的问题:配置应该放在哪,生成文件为什么要排除,JSX 单引号如何生效,以及 Windows 下怎样让 EditorConfig、Git 和 Oxfmt 使用同一种换行符;最后整理首次全量格式化和日常检查的执行顺序。