---
title: 你的第一次逆向工程调查-REA
url: https://rea.tools/zh-CN/first-investigation/
---

[首页](https://rea.tools/zh-CN/) / 第一次调查

# 弄清楚 导出的笔记写到哪里。

用 REA 检查一个小应用，追踪 Export notes 按钮，再亲自验证一个细节。

提供的示例 · Node.js 和 npm · 编程助手

## 1. 把助手连接到 REA

使用 Claude Code、Codex、Cursor 等编程助手。需要 Node.js 和 npm；[安装指南列出了支持的版本](https://rea.tools/get-started/)。

你的编程助手

使用 npx rea-agents@latest setup 安装 REA，并连接到这个编程助手。先展示安装计划，等我确认后再执行，然后验证安装结果。

或者在终端中运行此命令:

`npx rea-agents@latest setup`

查看计划，确认配置后重启助手。如果已经连接，直接继续。

## 2. 问清 CSV 写到哪里

示例是一个包含六个文件的 Electron 应用，带有**Export notes（导出笔记）**按钮。助手无需安装或启动 Electron 就能检查代码。

你的编程助手

下载 https://rea.tools/examples/notes-example.zip，放进一个新的示例文件夹并解压。用 REA 找出点击 Export notes 后发生了什么。展示 notes.csv 写到哪里、有哪些字段，以及相关文件和行号。

助手会下载并解压文件，再把目录交给 REA 检查。

[下载示例ZIP](https://rea.tools/examples/notes-example.zip)

如果助手不能下载文件，你也可以手动解压。把 `notes-example` 文件夹的路径交给它，再问同一个导出问题。

## 3. 从回答追踪到代码

寻找带文件和行号的简短解释：

> 按钮发送 `notes:export` 消息。主进程把笔记转换为 CSV，并将 `notes.csv` 写到用户的下载文件夹。列名为 `id` 和 `title`。

从按钮到文件写入

1. 页面 · renderer.js

   Export notes

   调用 `notes.exportCsv()`。
2. 桥接 · preload.js

   `notes:export`

   向主进程发送命名消息。
3. 处理函数 · main.js

   写入 notes.csv

   调用 `csv.js` 中的格式化函数，再写入文件。

REA 的静态分析把消息和处理函数关联起来。导出位置是从代码中读到的。

main.js · 第 8–12 行[源代码](https://rea.tools/examples/notes-electron/main.js)

```
ipcMain.handle("notes:export", () => {
  const destination = path.join(app.getPath("downloads"), "notes.csv");
  writeFileSync(destination, toCsv(notes), "utf8");
  return destination;
});
```

文件路径、格式化函数和写入调用都在这个处理函数中。如果回答没有展示这些行，可以让助手补上。

[查看完整的代码追踪和记录的 REA 结果](https://rea.tools/guides/javascript/#follow)。

## 4. 检查预测

CSV 用逗号分隔各列。如果笔记标题本身包含逗号或引号，会发生什么？

你的编程助手

预测 id 为 1、标题为 Hello, "REA" 的笔记会导出怎样的 CSV。再用 Node.js 运行示例的 toCsv 格式化函数验证。展示预测和实际输出。

预期格式化程序输出

```
id,title
1,"Hello, ""REA"""
```

标题保留在一个带引号的字段里，每个引号都写成两个。这里用 Node.js 直接检查格式化函数。

自己检查一下

在解压后的 `notes-example` 文件夹里打开终端：

macOS / Linux · Bash / Zsh

```
node <<'JS'
const { toCsv } = require('./csv.js');
process.stdout.write(toCsv([{ id: 1, title: 'Hello, "REA"' }]));
JS
```

Windows · PowerShell

```
@'
const { toCsv } = require('./csv.js');
process.stdout.write(toCsv([{ id: 1, title: 'Hello, "REA"' }]));
'@ | node
```

## 5. 再问一个问题

在同一段对话中继续提问：

> 如果文件无法写入，会发生什么？沿着错误处理追踪回页面。

也可以提供自己的应用，询问其中一个按钮、文件或行为。

- [Notion 如何复制文本和 HTML](https://rea.tools/zh-CN/showcase/notion/)追踪打包 Electron 应用中的剪贴板功能。
- [DX-Ball 如何计算声像定位](https://rea.tools/zh-CN/showcase/dx-ball/)阅读原始指令，以及重建结果的校验。
- [安装或分析遇到问题](https://rea.tools/zh-CN/faq/#troubleshooting)先更新 REA，再检查连接。
