Para onde vão as" notas de exportação"?
Este guia usa um pequeno aplicativo Electron. Clicar Notas de exportação chama uma API na página, cruza para o processo principal e grava um CSV . O comportamento está espalhado por vários arquivos.
A exportação CSV através dos processos Electron
-
Pré-carga do renderizador
notes.exportCsv()renderer.jschama a API exposta porpreload.js. -
Entre processos
notes:exportO preload invoca um canal IPC: uma mensagem nomeada para o processo principal. -
Processo principalUm manipulador de exportação
main.jslida com esse canal e chama o gravador CSV.
csv.js Formata as notas7 main.js escreve downloads/notes.csv.
Pergunte sobre a exportação CSV
Ligue o seu agente ao REA e dê a ele o diretório do aplicativo ou o arquivo ASAR:
Use REA para encontrar o que acontece quando eu exportar notas neste app. Onde é criado o CSV?
Exemplo de alerta. Inclua o caminho absoluto para a pasta do aplicativo ou app.asar.
REA lê os arquivos do aplicativo e cria um mapa de pontos de entrada, módulos e limites do processo. Seu agente usa esse mapa para restringir a investigação ao recurso de exportação.
Rastrear o código de exportação
A página chama uma pequena API
document.querySelector("#export").addEventListener("click", async () => {
const destination = await window.notes.exportCsv();
document.querySelector("#status").textContent = `Saved to ${destination}`;
});
A página conhece o nome do método. A implementação reside na pré-carga, o que a expõe ao renderizador.
contextBridge.exposeInMainWorld("notes", {
exportCsv: () => ipcRenderer.invoke("notes:export"),
});
REA records notes.exportCsv e o canal literal notes:export. Ele emparelha essa invocação com o manipulador de correspondência único no processo principal.
ipcMain.handle("notes:export", () => {
const destination = path.join(app.getPath("downloads"), "notes.csv");
writeFileSync(destination, toCsv(notes), "utf8");
return destination;
});
A leitura do manipulador responde à pergunta original: csv.js Formata as notas e o processo principal escreve notes.csv na pasta Transferências do utilizador.
{
"literal_channels": 1,
"renderer_transmissions": 1,
"main_handlers": 1,
"paired_renderer_transmissions": 1,
"ambiguous_renderer_transmissions": 0
}
Gravado por REA 4.1.0 no exemplo para download abaixo. Os locais de origem acompanham as descobertas da API, do canal e do manipulador.
Analise você mesmo o exemplo
Baixe o exemplo e descompacte-o. O arquivo contém o arquivo completo notes-example pasta. Analise-o com Node.js e npm; Electron não é necessário para este exemplo.
Procurar os seis ficheiros de origem
npx -y rea-agents@latest analyze-javascript-application \
/absolute/path/to/notes-example --json
Substitua o caminho pela pasta que você descompactou. Você deve encontrar um canal IPC e um manipulador correspondente em normalized_result.summary.ipc. Os locais de origem estão em normalized_result.graph.
Para seu próprio aplicativo, use o mesmo comando com seu diretório ou caminho ASAR. Um agente pode seguir uma string literal, nome de API ou canal IPC com as ferramentas de rastreamento de recursos do REA.
Inspecionar o gravador CSV
Seguir
notes:exportao seu manipulador. Quais entradas atingem o gravador CSV e o que acontece se a gravação do arquivo falhar?
Use os locais de origem para inspecionar esses detalhes. Nomes de canais computados e manipuladores ambíguos podem permanecer sem solução; as observações de tempo de execução fornecem outra maneira de investigá-los.
- Seguir A Ponte da área de transferência de Notion Aplique a mesma abordagem a um aplicativo Electron empacotado.
- Observar uma exportação do navegadorCapture um clique real e veja qual solicitação ele faz.
- Seguir uma função nativaContinue em um binário quando um recurso depender do código nativo.