CommonJS 循环依赖为什么会读到尚未初始化完成的导出?
用三个独立 CommonJS 文件复现循环依赖中的初始化顺序,区分复制属性值与保留导出对象引用,解释 module.exports 重新赋值的风险,并给出拆分依赖和显式初始化的改法。
Node.js · 缓存面试题第 1 页,显示第 1–6 题,共找到 6 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
用三个独立 CommonJS 文件复现循环依赖中的初始化顺序,区分复制属性值与保留导出对象引用,解释 module.exports 重新赋值的风险,并给出拆分依赖和显式初始化的改法。
围绕“删除 require.cache 后重新 require 能否真正热更新模块,有什么残留风险”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明缓存键是绝对路径、删除后旧导出对象仍被旧引用持有的风险。
围绕“Node.js 中 NODE_ENV=production 到底改变了什么,框架与依赖库据此做了哪些不同行为”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须澄清 Node 核心本身不读 NODE_ENV、行为差异来自生态库(如视图缓存、错误详情隐藏)。
围绕“Node.js 把大文件流式转成 Base64 时按任意字节块 encode 为什么会得到错误结果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答 Base64 以 3 字节为一组,需缓存余量在流尾补 padding,不能每块独立编码。
围绕“Node.js Buffer.slice 共享内存而 Buffer.from(buffer) 拷贝,这一差异如何影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明 slice 视图会钉住原大 Buffer 导致无法回收,长期保存应拷贝或 subarray 后复制。
围绕“Node.js 用 Transform 解析 NDJSON 时,最后一块没有换行也应产出一条记录,应放在哪里处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖实现时要设计按行缓存,flush 把剩余缓冲作为最后记录并处理空行。