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

[首頁](https://rea.tools/zh-TW/) / 第一次調查

# 弄清楚 匯出的筆記寫到哪裡。

用 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-TW/showcase/notion/)追蹤打包 Electron 應用中的剪貼簿功能。
- [DX-Ball 如何計算聲音左右位置](https://rea.tools/zh-TW/showcase/dx-ball/)檢視原始指令，以及重建結果的驗證。
- [安裝或分析遇到問題](https://rea.tools/zh-TW/faq/#troubleshooting)先更新 REA，再檢查連線。
