Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

555
Visualizações
Exponga los métodos NodeJS (FS) en Electron Renderer

Estoy usando Quasar v2 para el desarrollo de mi aplicación Electron.

En esta versión, los módulos de nodos nativos ya no funcionarán en los procesos del renderizador.

Para evitar esto, existe electron-preload.js donde podemos acceder a estos métodos de nodo y exponerlos a las otras partes de la aplicación.

Así que hice esto para exponer fs :

 import { contextBridge } from 'electron' contextBridge.exposeInMainWorld('electronFs', require('fs'))

Luego, en mis archivos Vue/js:

 const fs = window.electronFs || require('fs') fs.lstatSync(somePath).isFile()

Pero luego fs.lstatSync(...).isFile is not a function . ¿Alguna idea de cómo puedo hacer que esto funcione?

Esto es solo para una aplicación local (sin conectividad web).

¡Gracias!

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Eso sucede porque, en Electron, el backend y la interfaz de usuario no comparten el mismo proceso (se ejecutan en diferentes subprocesos) porque si permite exponer las API de nodos nativos en el contexto del usuario (la interfaz de usuario que finalmente se ejecuta en Chromium), significa que cada vez que se carga javascript externo, pueden acceder a todas esas API nativas en la computadora del usuario.

Entonces, esas variables se transportan de un hilo a otro usando IPC (Comunicación entre procesos), son solo datos, deben ser primitivos, si no, al final se serializan en primitivos (tipos de variables sin métodos u objetos como cadena, números, fechas u objetos como cadena o binario), por lo que probablemente para enviar esos objetos desde el contexto principal al contexto de la interfaz de usuario, Electron probablemente elimine todas las propiedades no serializables (por lo que no hay funciones).

No hagas eso, es extremadamente inseguro, solo mueve datos de un lado a otro, lo cual es muy similar a usar WebSockets.

about 4 years ago · Juan Pablo Isaza Relatório

0

De forma predeterminada, el proceso Main no comparte el mismo contexto que el de Renderer . Y Preload se ejecuta en un contexto de Renderer pero aislado. En lugar de exponer las API nativas de Nodejs a Renderer de manera insegura, incluso si está creando una aplicación local, aún puede usar IPC para exponer interfaces limitadas al proceso de Preload de Renderer , luego use contextBridge para exponer las API a Renderer . Aquí hay algunos fragmentos de demostración.

 /* Main.js */ const fs = require('fs'); const {ipcMain} = require('electron'); ipcMain.handle('isFile', (path) => fs.lstatSync(path).isFile() )
 /* Preload.js */ import {ipcRenderer, contextBridge} from "electron"; contextBridge.exposeInMainWorld('myAPIs', { isFile: (path) => ipcRenderer.invoke('isFile') }
 /* index.vue */ myAPIs.isFile('path-to-file');
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda