边缘运行时的调试心法
本地能跑、线上报错,是边缘开发最常见的落差。学会读日志、复现边界条件,比猜更快。
边缘运行时和本地 Node 环境的差异,是绝大多数「本地正常、线上 500」的根源。常见差异有三类。
第一类是全局对象。边缘环境没有完整的 Node API,`fs`、`path` 的不同实现、以及缺失的 `process` 行为都会导致运行时错误。使用兼容标志能解决一部分,但不能全指望它。
第二类是绑定注入时机。数据库、KV 这类绑定不在全局作用域里无条件存在,必须从请求上下文取。在模块顶层直接访问绑定,本地开发可能因为模拟层宽容而通过,线上则会拿到空值。这类问题最隐蔽,因为往往不报错,只是静默降级。
第三类是构建产物的差异。同一份源码用不同模式构建,产物可能完全不同。曾经遇到过构建缓存导致的条件分支被错误折叠,本地开发正常,线上却走了降级分支。
应对方法:提交前务必用生产构建产物预览一次,而不是只跑 dev server;日志要看完整的请求链路而不是只看最终状态码;对「静默降级」的分支一定要有显式日志,否则问题会被掩盖很久。
静默降级的分支要加日志——吃过这个亏,排查了一整天。