如何在main中的渲染器进程中在Electron中运行函数?

时间:2018-02-21 14:18:13

标签: javascript webpack electron

我目前正在为电子编写一些简单的插件框架。我需要渲染器进程中的文件。这适用于UI元素,但我想添加一个在启动时运行快速服务器的插件。只要BrowserWindow仍然可见,此功能就可以使用。一旦我关闭它,服务器就会关闭。这几乎表明服务器已在渲染器进程上创建。

我的想法是在我的executeFunction文件中导出一个名为main.js的函数,该文件使用电子启动。它只是调用传递给它的函数。然后我使用const { executeFunction } = require('electron').remote.require('./main')导入了该文件,并将setupServer函数传递给它。

由于一些奇怪的原因,即使我在调用函数之前将它传递给主进程,它仍会在渲染器上调用。

我是否有可能知道我想做什么?

以下是相关的代码段:

export function executeFunction(externalFunction) {
    try {
        externalFunction();
        log.warn(`running on renderer? ${isRenderer}`);
    } catch(e) {
        console.log(e);
    }
}

以下是服务器设置代码:

import express from 'express';
import graphqlHttp from 'express-graphql';
import {
    buildSchema
} from 'graphql';

const { app } = require('electron').remote;
const {executeFunction} = require('electron').remote.require('./main');
import log from 'electron-log';
import isRen from 'is-electron-renderer';

export default function setupServer() {
    const schema = buildSchema(`
    type Query {
        hello: String
    }
`);

    const root = {
        hello: () => {
            return 'Hello World!';
        },
    };

    const expressApp = express();
    expressApp.use('/graphql', graphqlHttp({
        schema,
        rootValue: root,
        graphiql: true,
    }));
    log.warn(`is renderer ${isRen}`);
    const server = expressApp.listen(4000);
    log.warn('listening on port 4000');

    // make sure to close the server on window-closed
    app.on('quit', () => {
        log.warn('app is closing, shutting down server');
        server.close()
    });
}

// start server
executeFunction(() => {
    setupServer();
});

0 个答案:

没有答案