Rastrear um Electron
Exportação CSV.

Siga um clique de botão da API da página, através do Electron IPC, até o gravador de arquivos CSV.

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

  1. Pré-carga do renderizadornotes.exportCsv()renderer.js chama a API exposta por preload.js.
  2. Entre processosnotes:exportO preload invoca um canal IPC: uma mensagem nomeada para o processo principal.
  3. Processo principalUm manipulador de exportaçãomain.js lida com esse canal e chama o gravador CSV.

csv.js Formata as notas7 main.js escreve downloads/notes.csv.

REA corresponde à chamada IPC literal ao seu manipulador e identifica a API exposta. O caminho é inferido do Código; uma captura de tempo de execução pode verificar o que é executado.

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:

O seu agente de codificação

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

renderer.js * fonte de exemplo
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.

preload.js * fonte de exemplo
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.

main.js * fonte de exemplo
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.

REA resultado * resumo.excerto do ipc
{
  "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.

Baixar exemplo ZIP

Procurar os seis ficheiros de origem
Análise estática da aplicação
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:export ao 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.

Top