答案:通过调试器附加到运行中的 node 进程,在 debug console 中执行 object.keys(require.cache) 可查看当前已加载模块的绝对路径列表;注意 process.loadedmodules 在 node.js v14+ 已移除,且 es 模块、动态 import 或工具链 patch 会导致部分模块不出现于 require.cache。

如何查看当前 Node 进程实际加载了哪些模块
VSCode 本身不提供“实时模块快照”功能,但你可以通过调试器附加到运行中的 Node 进程,再利用 process.loadedModules(仅 Node.js ≤ v12)或更通用的 require.cache 来 inspect 当前已加载模块列表。注意:这不是静态分析,而是运行时快照,必须在进程启动后、尚未退出前获取。
-
process.loadedModules在 Node.js v14+ 已被移除,强行访问会报TypeError: Cannot read property 'loadedModules' of process - 可靠方式是读取
require.cache—— 它是一个 Map-like 对象,键为绝对路径(如/project/node_modules/axios/lib/axios.js),值为对应的Module实例 - 在调试控制台中执行
Object.keys(require.cache)可快速列出所有已缓存模块路径 - 若想过滤第三方包,可用正则匹配:
Object.keys(require.cache).filter(p => p.includes('node_modules'))
在 launch.json 中启用调试并触发模块检查
直接在终端跑 node -p "console.log(Object.keys(require.cache))" 只能看启动瞬间的快照,而真实场景中模块可能按需加载(比如 require() 延迟到某函数内)。所以必须结合调试器,在关键位置暂停后查。
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
- 确保
launch.json的type为"node",request为"launch"或"attach" - 在你想观察模块状态的代码行(例如
const express = require('express')后)打一个断点 - F5 启动后,打开调试控制台(Debug Console),输入
require.cache或Object.keys(require.cache).length查总数 - 不要用
console.log(require.cache)—— 它在控制台里会触发隐式inspect(),可能因循环引用卡死或截断输出
为什么 require.cache 看起来“漏掉”某些模块
常见错觉是 require.cache 没列出你刚 require 的包,其实是因为:
- Esm 模块(
.mjs或"type": "module")不走require.cache,它用的是import.meta.resolve()+Module._cache(内部私有,不可靠) - 动态
import()加载的模块不会写入require.cache,而是存在Module._linked或 V8 内部模块图中,无法通过 JS API 直接枚举 - 某些包(如
esbuild、ts-node)会 patchrequire或绕过标准加载流程,导致路径未登记 -
require.resolve('pkg') !== require.cache['pkg']——resolve返回路径,cache键是实际加载文件的绝对路径(可能指向index.js而非package.json)
快速定位模块来源的实用技巧
当你看到一个模块路径在 require.cache 里,但不确定它来自哪个包或为何被加载,可以:
- 复制路径(如
/a/b/node_modules/lodash/fp.js),粘贴进 VSCode 地址栏跳转,然后看文件顶部注释或package.json所在目录 - 在调试控制台执行
require.resolve('lodash'),对比返回路径与 cache 中键是否一致 - 如果路径含
node_modules/.pnpm/或node_modules/.vite/deps/,说明是 pnpm 或 Vite 的硬链接/预构建产物,不是常规 npm install 结果 - 对疑似重复加载的模块(同一包多个路径),检查是否因
peerDependency不匹配导致多份实例共存——这常引发 React Hook 报错或 Context 失效
require.cache 是事实,但它的内容取决于你代码里怎么写 require、工具链怎么打包、甚至 node --loader 是否介入。别只盯着列表长度,重点看路径结构和加载时机。










