Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

223
Vistas
ES6 import of electron modules with Vite/Vue fails

I am trying to use electron with latest Vite 2/Vue 3. I have setup two versions of electron's main file so I can test and work with both dev server and the build:

  • dev version loading the localhost:3000 (from npm run dev) with loadURL
  • another version loading the built version (from npm run build)from the dist folder with loadFile

I have set in the new BrowserWindow options:

webPreferences: {
   nodeIntegration: true,
   contextIsolation: false,
   enableRemoteModule: true,
   preload: path.join(app.getAppPath(), 'electron.preload.js')
}

The app starts just fine in Electron in both dev and build version, loads all assets and without any security errors. However, when I try to import any module from 'electron' in my project, in example:

import electron from 'electron';

I get the error:

Uncaught TypeError: path.join is not a function
    at node_modules/electron/index.js (index.js:4)

I tried to check path and __dirname, to see if they work in my project:

import * as path from 'path';

console.log(path);
console.log(path.join);
console.log(__dirname);

And these do trace out the following in Electron dev panel:

enter image description here

If I try to import path differntly:

import path from 'path'
console.log(path);
console.log(path.join);

I get the following result:

enter image description here

In any case, path.join is undefined. And now I am pretty much stuck on how to go on.

I can also add that I want to use fs-extra, but this also fails:

import fs from 'fs-extra';

enter image description here

[Edit: added the preload in webPreferences]

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

I believe Vite transforms things a lot behind the scenes. Thankfully @electron/remote provides an alternate way to fetch things:

electron.js:

const { app, BrowserWindow } = require("electron");
const Remote = require("@electron/remote/main");

Remote.initialize();

// ...

app.on("ready", () => {
  mainWindow = new BrowserWindow({
    webPreferences: {
      nodeIntegration: true,
      enableRemoteModule: true,
      contextIsolation: false,
    },
  });

  Remote.enable(mainWindow.webContents);

  mainWindow.loadFile(path.resolve("./dist", "index.html"));
});

// ...

Component.tsx:

import type { BrowserWindow } from "electron";


const Component: React.FC = () => {
  const app = window.require("@electron/remote");
  const win: BrowserWindow = app.getCurrentWindow();

  // ...
}

Not sure if this is the best solution, but it works for me with Vite + Electron + React.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda