Ακολουθήστε μια εξαγωγή
CSV στο Electron.

Ακολουθήστε ένα κλικ σε κουμπί από το API της σελίδας, μέσω του IPC του Electron, μέχρι τον κώδικα εγγραφής του αρχείου CSV.

Πού οδηγεί το «Export notes»;

Αυτός ο οδηγός χρησιμοποιεί μια μικρή εφαρμογή Electron. Πατώντας Export notes, καλείται ένα API στη σελίδα, η ενέργεια περνά στην κύρια διεργασία και γράφεται ένα CSV. Η συμπεριφορά κατανέμεται σε αρκετά αρχεία.

Η εξαγωγή CSV μεταξύ των διεργασιών του Electron

  1. Renderer → preloadnotes.exportCsv()Το renderer.js καλεί το API που εκθέτει το preload.js.
  2. Μεταξύ διεργασιώνnotes:exportΤο preload καλεί ένα κανάλι IPC: ένα ονομασμένο μήνυμα προς την κύρια διεργασία.
  3. Κύρια διεργασίαΈνας χειριστής εξαγωγήςΤο main.js χειρίζεται αυτό το κανάλι και καλεί τον κώδικα εγγραφής CSV.

Το csv.js μορφοποιεί τις σημειώσεις → το main.js γράφει το downloads/notes.csv.

Το REA αντιστοιχίζει την κλήση IPC με κυριολεκτικό όνομα στον χειριστή της και αναγνωρίζει το εκτεθειμένο API. Η διαδρομή συνάγεται από τον κώδικα· μια καταγραφή κατά την εκτέλεση μπορεί να ελέγξει τι εκτελείται.

Ρωτήστε για την εξαγωγή CSV

Συνδέστε τον βοηθό σας με το REA και δώστε του τον κατάλογο της εφαρμογής ή το αρχείο ASAR:

Ο βοηθός προγραμματισμού σας

Χρησιμοποιήστε το REA για να βρείτε τι συμβαίνει όταν εξάγω σημειώσεις σε αυτή την εφαρμογή. Πού δημιουργείται το CSV;

Παράδειγμα προτροπής. Συμπεριλάβετε την απόλυτη διαδρομή προς τον φάκελο της εφαρμογής ή το app.asar.

Το REA διαβάζει τα αρχεία της εφαρμογής και δημιουργεί έναν χάρτη σημείων εισόδου, μονάδων και ορίων διεργασιών. Ο βοηθός σας χρησιμοποιεί αυτόν τον χάρτη για να εστιάσει τη διερεύνηση στη λειτουργία εξαγωγής.

Ακολουθήστε τον κώδικα εξαγωγής

Η σελίδα καλεί ένα μικρό API

renderer.js · πηγαίος κώδικας του παραδείγματος
document.querySelector("#export").addEventListener("click", async () => {
  const destination = await window.notes.exportCsv();
  document.querySelector("#status").textContent = `Saved to ${destination}`;
});

Η σελίδα γνωρίζει το όνομα της μεθόδου. Η υλοποίηση βρίσκεται στο preload, που την εκθέτει στον renderer.

preload.js · πηγαίος κώδικας του παραδείγματος
contextBridge.exposeInMainWorld("notes", {
  exportCsv: () => ipcRenderer.invoke("notes:export"),
});

Το REA καταγράφει το notes.exportCsv και το κυριολεκτικό όνομα καναλιού notes:export. Αντιστοιχίζει αυτή την κλήση με τον μοναδικό αντίστοιχο χειριστή στην κύρια διεργασία.

main.js · πηγαίος κώδικας του παραδείγματος
ipcMain.handle("notes:export", () => {
  const destination = path.join(app.getPath("downloads"), "notes.csv");
  writeFileSync(destination, toCsv(notes), "utf8");
  return destination;
});

Η ανάγνωση του χειριστή απαντά στην αρχική ερώτηση: το csv.js μορφοποιεί τις σημειώσεις και η κύρια διεργασία γράφει το notes.csv στον φάκελο λήψεων του χρήστη.

Αποτέλεσμα REA · απόσπασμα summary.ipc
{
  "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.js και npm· το 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 και τι συμβαίνει αν η εγγραφή του αρχείου αποτύχει;

Χρησιμοποιήστε τις θέσεις στον πηγαίο κώδικα για να εξετάσετε αυτές τις λεπτομέρειες. Τα ονόματα καναλιών που υπολογίζονται και οι αμφίσημοι χειριστές μπορεί να παραμείνουν ανεπίλυτα· οι παρατηρήσεις κατά την εκτέλεση σας δίνουν έναν ακόμη τρόπο διερεύνησης.

Κορυφή