0
votes

I can't make it work,

const { exec } = require("child_process");

TypeError: spawn is not a function

TypeError: exec is not a function

I want to execute "git status" throw the system call in my electron app, does anybody could make it work??

This is mi code:

enter image description here

const path = require('path');

const { app, BrowserWindow } = require('electron');
const isDev = require('electron-is-dev');

function createWindow() {
    // Create the browser window.
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        titleBarStyle: "hiddenInset",
        transparent: true,
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
            enableRemoteModule: true
        }
    });

    // and load the index.html of the app.
    // win.loadFile("index.html");
    win.loadURL(
        isDev
            ? 'http://localhost:3000'
            : `file://${path.join(__dirname, '../build/index.html')}`
    );
    // Open the DevTools.
    if (isDev) {
        win.webContents.openDevTools({ mode: 'detach' });
    }
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(createWindow);

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
        app.quit();
    }
});

app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
        createWindow();
    }
});

App.js

import React from 'react';
import './App.scss';

import {ThemeProvider, createTheme} from '@mui/material/styles';
import {TokenConsumer, TokenProvider} from "./hooks/tokensContext";

import Login from "./components/Login";
import StrategicPartnerTabs from "./components/StrategicPartnerTabs";
import {UserConsumer, UserProvider} from "./hooks/userContext";

const { exec } = require("child_process");


const darkTheme = createTheme({
    palette: {
        mode: 'dark',
    },
});

const Providers = ({children}) =>
    <ThemeProvider theme={darkTheme}>
        <TokenProvider>
            <UserProvider>
                {children}
            </UserProvider>
        </TokenProvider>
    </ThemeProvider>


const App = () => {
    exec('echo "HELLO"', function (error, stdout, stderr) {
        console.log(error);
        console.log(stdout);
        console.log(stderr);
    });
    return (
        <Providers>
            <div className="app">
                <UserConsumer>
                    {() =>
                        <TokenConsumer>
                            {({tokens}) => (
                                <>
                                    {tokens ? <StrategicPartnerTabs/> : <Login/>}
                                </>
                            )}
                        </TokenConsumer>
                    }
                </UserConsumer>
            </div>
        </Providers>
    );
};

export default App;
you can't call a node.js library from the browser (the renderer process) - Frédéric Lang
Hi @FrédéricLang, i know but i've seen that some people did it... even with nodejs. - Juan
yes, what you need is to add IPC inside your app. then you can call a nodejs function from your renderer process. - Frédéric Lang