Куди дівається "експорт нотаток"?
У цьому посібнику використовується невеликий додаток Electron. При натисканні кнопки Експортувати нотатки викликається API на сторінці, виконується перехід до основного процесу і записується CSV . Поведінка розподілена по декількох файлах.
Експорт CSV в рамках процесів Electron
-
Візуалізатор → попереднє завантаження
notes.exportCsv()renderer.jsвикликає API, наданий за допомогоюpreload.js. -
Примітки: при експорті попереднього завантаження викликається IPC-канал: іменоване повідомлення для основного процесу
notes:export. -
Основний процес - обробник експорту
main.jsmain.js обробляє цей канал і викликає CSV writer.
csv.js форматує нотатки → main.js записує файли для downloads/notes.csv.
Запитайте про експорт CSV
Підключіть свій агент до REA і передайте йому каталог програм або файл ASAR:
Використовуйте REA, щоб побачити, що відбувається, коли я експортую нотатки до цієї програми. Де створено CSV?
Приклад запиту. Вкажіть абсолютний шлях до папки програми або app.asar.
REA зчитує файли програми та створює карту точок входу, модулів та меж процесів. Ваш агент використовує цю карту, щоб звузити пошук до функції експорту.
Відстеження експортного коду
Сторінка викликає невеликий API
document.querySelector("#export").addEventListener("click", async () => {
const destination = await window.notes.exportCsv();
document.querySelector("#status").textContent = `Saved to ${destination}`;
});
Сторінці відомо ім'я методу. Реалізація знаходиться в попередньому завантаженні, яка надає її в розпорядження засоби візуалізації.
contextBridge.exposeInMainWorld("notes", {
exportCsv: () => ipcRenderer.invoke("notes:export"),
});
REA записує notes.exportCsv і буквений канал notes:export. Він пов'язує цей виклик з єдиним відповідним обробником в основному процесі.
ipcMain.handle("notes:export", () => {
const destination = path.join(app.getPath("downloads"), "notes.csv");
writeFileSync(destination, toCsv(notes), "utf8");
return destination;
});
Читання обробника дає відповідь на оригінальне запитання: csv.js нотатки форматуються, і основний процес записує файл notes.csv в папку завантажень користувача.
{
"literal_channels": 1,
"renderer_transmissions": 1,
"main_handlers": 1,
"paired_renderer_transmissions": 1,
"ambiguous_renderer_transmissions": 0
}
Записано за допомогою REA 4.1.0 на прикладі, який можна завантажити нижче. Розташування вихідних текстів відповідає висновкам API, каналу та обробника.
Проаналізуйте цей приклад самостійно
Завантажте приклад і розпакуйте його. Архів містить повну папку з notes-example. Проаналізуйте його з Node.jsnpm; Electron для цього прикладу не потрібен.
Приклад завантаження ZIP-файлу
Перегляньте шість оригінальних файлів
npx -y rea-agents@latest analyze-javascript-application \
/absolute/path/to/notes-example --json
Замініть шлях на папку, яку ви розпакували. Ви повинні знайти один канал IPC та один відповідний обробник у normalized_result.summary.ipc. Місця розташування джерел вказані в normalized_result.graph.
Для власної програми використовуйте ту саму команду, вказавши її каталог або шлях до ASAR. Агент може використовувати рядок літер, ІМ'Я API або канал IPC за допомогою інструментів відстеження функцій REA.
Перевірте пристрій запису CSV
Випливати
notes:exportв його обробник. Які вхідні дані надходять до CSV writer і що станеться, якщо запис файлу не вдасться?
Використовуйте розташування джерел для перевірки цих відомостей. Назви обчислених каналів та неоднозначні обробники можуть залишатися невирішеними; спостереження під час виконання дають вам інший спосіб їх вивчення.
- Скористайтеся мостом обміну Notion і застосуйте той самий підхід до пакетної програми Electron.
- Поспостерігайте, як браузер при експорті фіксує реальний клік, і подивіться, який запит він робить.
- Виконання нативної функції продовжується у двійковому форматі, коли функція залежить від рідного коду.