Executing node module script in packaged electron app

Viewed 30

I was trying to execute node_modules/some_package/some_js.js from renderer using contextBridge. It works in dev server, but in packaged app.

Here is my preload.js code.

import { exec, fork } from "child_process";
import { contextBridge } from "electron";
import path from "path";


contextBridge.exposeInMainWorld("pwr", {
  node: () => {
    const __dirname = path.resolve();
    const child_argv = ["codegen", ""];
    const child_execArgv = ["codegen"];
    fork(__dirname + "/node_modules/playwright-core/cli.js", child_argv);
  },

here is my client-side(renderer) code...

  const handleClick = () => {
    //@ts-ignore
    pwr.node();
  };

here is package.json

  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build && electron-builder"
  },

and this is vite config file

rmSync(path.join(__dirname, 'dist'), { recursive: true, force: true }) // v14.14.0

// https://vitejs.dev/config/
export default defineConfig({
  resolve: {
    alias: {
      '@': path.join(__dirname, 'src'),
      'styles': path.join(__dirname, 'src/assets/styles'),
    },
  },
  plugins: [
    react(),
    electron({
      main: {
        entry: 'electron/main/index.ts',
        vite: {
          build: {
            // For Debug
            sourcemap: true,
            outDir: 'dist/electron/main',
          },
          // Will start Electron via VSCode Debug
          plugins: [process.env.VSCODE_DEBUG ? onstart() : null],
        },
      },
      preload: {
        input: {
          // You can configure multiple preload scripts here
          index: path.join(__dirname, 'electron/preload/index.ts'),
        },
        vite: {
          build: {
            // For Debug
            sourcemap: 'inline',
            outDir: 'dist/electron/preload',
          }
        },
      },
      // Enables use of Node.js API in the Electron-Renderer
      // https://github.com/electron-vite/vite-plugin-electron/tree/main/packages/electron-renderer#electron-renderervite-serve
      renderer: {},
    }),
  ],
  server: process.env.VSCODE_DEBUG ? {
    host: pkg.debug.env.VITE_DEV_SERVER_HOSTNAME,
    port: pkg.debug.env.VITE_DEV_SERVER_PORT,
  } : undefined,
})

Source Code: https://github.com/liansnail/electron-demo

Build Tool: Vite OS: mac arm64 node version: 16.14.2

Please let me know what I'm missing. I used Vite for

Edit: I turned off asar option but it still doesn't work.

  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build && electron-builder build --config.asar=false"
  },
0 Answers
Related