S2.5.2 Task 2.5

Grep 每个导出来找所有跨模块引用

当你需要知道一个模块的导出在大代码库中被用在哪里时,逐个 Grep 每个导出的函数名。这高效地识别每个 import 语句和引用,不需要加载每个文件。

追踪模式

模块 utils/parser.ts 导出 parseJSONparseCSVparseXML。找到所有使用:

  1. Grep("parseJSON") → 找到所有导入或调用 parseJSON 的文件
  2. Grep("parseCSV") → 找到所有导入或调用 parseCSV 的文件
  3. Grep("parseXML") → 找到所有导入或调用 parseXML 的文件

每次搜索返回匹配的文件和行——跨代码库的完整使用地图。

为什么用 Grep 不用 Glob?

Grep 搜索文件内容——它在文件内部找到 import { parseJSON } from './utils/parser' 这样的 import 语句。Glob 搜索文件路径——它找到叫 parser.ts 的文件,不是从 parser 导入的文件。一个叫 formatter.ts 的文件可能从 parser 导入,而 parser-utils.ts 可能没有。需要内容搜索。

为什么不全读?

读 200+ 个文件进上下文是浪费。Grep 用定向搜索达到同样的结果,只返回匹配的文件和行,消耗上下文的一小部分。

构建依赖图

Grep 识别出哪些文件使用了每个导出后:

  • Read 最关键的使用方来理解使用模式
  • 如果需要继续追踪依赖链(谁调用了调用者?)
  • 用这个理解来评估变更影响(如果 parseJSON 改了,这 12 个文件受影响)

这是安全重构的基础:改 API 之前先知道所有使用方。


一句话总结: Grep 每个导出的函数名来找所有跨模块引用——Grep 搜文件内容(import、调用),Glob 只搜文件名,读所有文件浪费上下文。