Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

556
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!