我目前正在为电子编写一些简单的插件框架。我需要渲染器进程中的文件。这适用于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();
});