
Create an Electron app from any web server in any programming language.
As Electron is actually an containerized extended Chromium web engine, I reckon that this must be possible somehow. However, by default, Electron uses ipcMain
/ipcRenderer
rather than http
or websocket
…
As for a lazy reader, you can see my example project at https://github.com/patarapolw/rep2recall-sqlite, which is Python Flask in Electron. There is also a pure TypeScript version -- https://github.com/patarapolw/e-rep2recall
Finding a random PORT
You might use https://www.random.org/integers/?num=1&min=5001&max=49151&col=5&base=10&format=html&rnd=new. Just make sure you don't use too common a port number.
Containerizing web server
This is quite easy for Python, using https://www.pyinstaller.org/. For a guide on how to add data files, you might follow https://github.com/smoqadam/PyFladesk#packaging.
For Java/Kotlin/other JVM languages, you might use https://github.com/johnrengelman/shadow, i.e. fat JAR, shadow JAR, uber JAR.
For JavaScript/TypeScript itself, you don't need containerizing, but make use you use absolute path, relative to __dirname
for everything, and avoid hidden imports. For Express.js, at least pug
and ejs
templating engine works, but make sure to use pug.renderFile()
and ejs.renderFile()
. You can avoid this altogether, though, by making use of static files.
Starting web server at app start, and killing web server at app exit, including on errors
For non-JavaScript, see https://github.com/patarapolw/rep2recall-sqlite/blob/master/src/node/electron.ts
For JavaScript/TypeScript, see https://github.com/patarapolw/e-rep2recall/blob/master/src/node/electron.ts
To kill on error, you might try doing a cleanup action just before node.js exits
Webpack-dev-server settings
See https://github.com/patarapolw/rep2recall-sqlite/blob/master/webpack.dev.js.
Have only tried http
and socket.io
. Never tried websocket
directly yet, though.
This allows you to run Electron in your default web browser in development mode using two terminal, webpack-dev-server
, and another running your default web server. Make sure to hide Electron specific code on development, though; otherwise it will throw an error in Webpack and in web browser.
Electron builder, and file associations
This might give you some ideas -- https://github.com/patarapolw/rep2recall-sqlite/blob/master/package.json#L61
asarUnpack
is needed for Python and static files. -- https://github.com/patarapolw/rep2recall-sqlite/blob/master/package.json#L86.