Traccia un Electron
Esportazione CSV.

Segui un clic del pulsante dall'API della pagina, tramite Electron IPC, al file writer CSV.

Dove vanno le "note di esportazione"?

Questa guida utilizza una piccola app Electron. Scattandosi Note di esportazione chiama un'API nella pagina, attraversa il processo principale e scrive un CSV . Il comportamento è distribuito su più file.

L'esportazione di CSV attraverso i processi Electron

  1. Renderer → precariconotes.exportCsv()renderer.js chiama l'API esposta da preload.js.
  2. Tra processinotes:exportIl precarico richiama un canale IPC: un messaggio denominato al processo principale.
  3. Processo principaleUn gestore di esportazionemain.js gestisce quel canale e chiama il writer CSV.

csv.js formatta le note → main.js scrivere downloads/notes.csv.

REA corrisponde alla chiamata IPC letterale al suo gestore e identifica l'API esposta. Il percorso è dedotto dal codice; un'acquisizione di runtime può controllare ciò che viene eseguito.

Chiedi informazioni sull'esportazione CSV

Connetti il tuo agente a REA e dagli la directory dell'app o il file ASAR:

Il tuo agente di codifica

Usa REA per trovare cosa succede quando esporto le note in questa app. Dove viene creato CSV?

Esempio prompt. Includere il percorso assoluto della cartella dell'applicazione o app.asar.

REA legge i file dell'applicazione e crea una mappa di entrypoints, moduli e confini di processo. L'agente utilizza tale mappa per restringere l'indagine alla funzione di esportazione.

Traccia il codice di esportazione

La pagina chiama una piccola API

renderer.js * esempio sorgente
document.querySelector("#export").addEventListener("click", async () => {
  const destination = await window.notes.exportCsv();
  document.querySelector("#status").textContent = `Saved to ${destination}`;
});

La pagina conosce il nome del metodo. L'implementazione vive nel precarico, che lo espone al renderer.

preload.js * esempio sorgente
contextBridge.exposeInMainWorld("notes", {
  exportCsv: () => ipcRenderer.invoke("notes:export"),
});

REA records notes.exportCsv e il canale letterale notes:export. Accoppia tale invocazione con il singolo gestore di corrispondenza nel processo principale.

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

La lettura del gestore risponde alla domanda originale: csv.js formatta le note e il processo principale scrive notes.csv nella cartella Download dell'utente.

REA risultato * riepilogo.estratto ipc
{
  "literal_channels": 1,
  "renderer_transmissions": 1,
  "main_handlers": 1,
  "paired_renderer_transmissions": 1,
  "ambiguous_renderer_transmissions": 0
}

Registrato da REA 4.1.0 nell'esempio scaricabile qui sotto. Le posizioni di origine accompagnano i risultati dell'API, del canale e del gestore.

Analizza l'esempio da solo

Scarica l'esempio e decomprimilo. L'archivio contiene il completo notes-example cartella. Analizzarlo con Node.js e npm; Electron non è necessario per questo esempio.

Scarica esempio ZIP

Sfoglia i sei file sorgente
Analisi statica delle applicazioni
npx -y rea-agents@latest analyze-javascript-application \
  /absolute/path/to/notes-example --json

Sostituire il percorso con la cartella decompressa. Dovresti trovare un canale IPC e un gestore corrispondente in normalized_result.summary.ipc. Le posizioni di origine sono in normalized_result.graph.

Per la tua app, usa lo stesso comando con la sua directory o il percorso ASAR. Un agente può seguire una stringa letterale, un nome API o un canale IPC con gli strumenti di tracciamento delle funzionalità di REA.

Ispezionare il writer CSV

Seguire notes:export al suo gestore. Quali input raggiungono il writer CSV e cosa succede se la scrittura del file non riesce?

Utilizzare le posizioni di origine per ispezionare tali dettagli. I nomi dei canali calcolati e i gestori ambigui possono rimanere irrisolti; le osservazioni di runtime offrono un altro modo per analizzarli.

Cima