Où va “Exporter les notes"?
Ce guide utilise une petite application Electron. En cliquant Exporter des notes appelle une API dans la page, traverse le processus principal et écrit un CSV . Le comportement est réparti sur plusieurs fichiers.
L'exportation de CSV à travers les processus Electron
-
Moteur de rendu → préchargement
notes.exportCsv()renderer.jsappelle l'API exposée parpreload.js. -
Entre les processus
notes:exportLa précharge appelle un canal IPC: un message nommé au processus principal. -
Processus principalUn gestionnaire d'exportation
main.jsgère ce canal et appelle l'écrivain CSV.
csv.js formate les notes → main.js écrit downloads/notes.csv.
Renseignez - vous sur l'exportation CSV
Connectez votre agent à REA et donnez-lui le répertoire de l'application ou le fichier ASAR:
Utilisez REA pour savoir ce qui se passe lorsque j'exporte des notes dans cette application. Où est créé le CSV?
Exemple d'invite. Inclure le chemin absolu vers le dossier de l'application ou app.asar.
REA lit les fichiers d'application et construit une carte des points d'entrée, des modules et des limites de processus. Votre agent utilise cette carte pour restreindre l'enquête à la fonction d'exportation.
Tracer le code d'exportation
La page appelle une petite API
document.querySelector("#export").addEventListener("click", async () => {
const destination = await window.notes.exportCsv();
document.querySelector("#status").textContent = `Saved to ${destination}`;
});
La page connaît le nom de la méthode. L'implémentation vit dans la précharge, ce qui l'expose au moteur de rendu.
contextBridge.exposeInMainWorld("notes", {
exportCsv: () => ipcRenderer.invoke("notes:export"),
});
Enregistrements REA notes.exportCsv et le canal littéral notes:export. Il associe cette invocation au seul gestionnaire correspondant dans le processus principal.
ipcMain.handle("notes:export", () => {
const destination = path.join(app.getPath("downloads"), "notes.csv");
writeFileSync(destination, toCsv(notes), "utf8");
return destination;
});
La lecture du gestionnaire répond à la question initiale: csv.js formate les notes et le processus principal écrit notes.csv dans le dossier Téléchargements de l'utilisateur.
{
"literal_channels": 1,
"renderer_transmissions": 1,
"main_handlers": 1,
"paired_renderer_transmissions": 1,
"ambiguous_renderer_transmissions": 0
}
Enregistré par REA 4.1.0 sur l'exemple téléchargeable ci-dessous. Les emplacements sources accompagnent les résultats de l'API, du canal et du gestionnaire.
Analysez l'exemple vous-même
Téléchargez l'exemple et décompressez-le. L'archive contient l'intégralité notes-example dossier. Analysez-le avec Node.js et npm; Electron n'est pas nécessaire pour cet exemple.
Parcourez les six fichiers sources
npx -y rea-agents@latest analyze-javascript-application \
/absolute/path/to/notes-example --json
Remplacez le chemin par le dossier que vous avez décompressé. Vous devriez trouver un canal IPC et un gestionnaire correspondant dans normalized_result.summary.ipc. Les emplacements sources sont en normalized_result.graph.
Pour votre propre application, utilisez la même commande avec son répertoire ou son chemin ASAR. Un agent peut suivre une chaîne littérale, un nom d'API ou un canal IPC avec les outils de traçage des fonctionnalités de REA.
Inspectez le graveur CSV
Suivre
notes:exportà son gestionnaire. Quelles entrées atteignent le graveur CSV et que se passe-t-il si l'écriture du fichier échoue?
Utilisez les emplacements sources pour inspecter ces détails. Les noms de canaux calculés et les gestionnaires ambigus peuvent rester non résolus; les observations d'exécution vous donnent un autre moyen de les étudier.
- Suivez le pont du presse-papiers de Notion Appliquez la même approche à une application Electron packagée.
- Observer une exportation de navigateurCapturez un vrai clic et voyez quelle demande il fait.
- Suivre une fonction nativeContinuez dans un binaire lorsqu'une fonctionnalité dépend du code natif.