后端
运行时Runtime
你可能会问
运行时到底是什么?为什么同一份代码换个地方就跑不起来?
简单来说
代码实际执行时依赖的环境,例如 Node.js、浏览器或 Cloudflare Workers。
code.js · 同一份代码
fetch()发起请求
document操作页面
fs.read()读取文件
跑在浏览器里跑在 Node.js 里水土不同,能力清单不同
01 · 先这样理解
把抽象概念放进真实场景
代码实际执行时依赖的环境,例如 Node.js、浏览器或 Cloudflare Workers。
换个角度想运行时像代码的水土:同一份 JavaScript,种在浏览器里能用 DOM 和 window,种在 Node.js 里能读文件、连数据库——水土不同,长得出的能力不同;水土不服,就地报错。
02 · 点击演示
同一行代码,插在哪个运行时上?
突出显示的部分,就是当前概念在整条流程中负责的位置。
document.querySelector('h1')
想找页面上的大标题
- 同一行代码,插到不同的水土里
- 浏览器的能力清单
DOM✓ 有fetch✓ 有文件系统✗ 没有Node.js 的能力清单文件系统✓ 有fetch✓ 有DOM✗ 没有Workers 的能力清单fetch✓ 有KV 存储✓ 有DOM / 文件✗ 没有 - OK找到了 h1DOM 是浏览器的本土能力Errordocument is not definedNode 里没有页面,自然没有 DOMErrordocument is not defined边缘节点上同样没有页面
1 / 4
Code · 写下一份 JavaScript
03 · 放进真实任务
什么时候会遇到它
选部署形态
传统服务器跑 Node,边缘节点跑 Workers——按需选水土。
看懂报错
「window is not defined」= 在服务端跑了浏览器专属的代码。
对齐版本
本地 Node 22、线上 Node 18,同一份代码可能两种表现。
04 · 想一想
用一个问题检查理解
代码在你电脑上跑得好好的,部署上线就报「fs is not defined」。怎么回事?
查看答案
代码用了 Node.js 的文件能力(fs),但线上是边缘运行时,那里没有文件系统——不是代码坏了,是水土换了。让 AI 改用目标运行时支持的方案即可。
最容易踩的坑
写代码前先问一句「这段跑在哪」。运行时决定能力边界,跨界调用是「本地好好的,一上线就崩」最常见的原因。