This is a fork of edge-js adapted to support Electron
Electron | Node.Js | x86/x64 | arm64 |
---|---|---|---|
Electron 23.x | v18.12.1 | ✔️ | ❌ |
Electron 24.x | v18.14.0 | ✔️ | ❌ |
Electron 25.x | v18.15.0 | ✔️ | ❌ |
Electron 26.x | v18.16.1 | ✔️ | ❌ |
Electron 27.x | v18.17.1 | ✔️ | ❌ |
Electron 28.x | v18.18.2 | ✔️ | ❌ |
Electron 29.x | v20.9.0 | ✔️ | ✔️ |
Electron 30.3.x | v20.15.1 | ✔️ | ✔️ |
Electron 31.3.x | v20.15.1 | ✔️ | ✔️ |
- You do not need to use the same version of Node.js in your project as Electron Node.js version
- On Linux and macOS
npm install
will compile binaries with correct Node.Js headers for a given Electron version.
npm install electron-edge-js
-var edge = require('edge-js');
+var edge = require('electron-edge-js');
var helloWorld = edge.func(function () {/*
async (input) => {
return ".NET Welcomes " + input.ToString();
}
*/});
Electron is built using specific version of Node.js. To use edge-js
in Electron project you would need to recompile it using the same Node.js version and Electron headers.
electron-edge-js
comes precompiled with correct Node.js versions and headers.
Sample app that shows how to work with .NET Core using inline code and compiled C# libraries.
https://github.com/agracio/electron-edge-js-quick-start
electron-edge-js
needs to be specified as an external module, some examples
webpack.config.js
externals: {
'electron-edge-js': 'commonjs2 electron-edge-js',
},
node: {
__dirname: false,
__filename: false,
},
vue.config.js
module.export = {
pluginOptions: {
electronBuilder: {
externals:["electron-edge-js"]
}
}
}
From #138
webpack.config.js
externals: {
'electron-edge-js': 'commonjs2 electron-edge-js',
},
node: {
__dirname: false,
__filename: false,
},
extraResources:[
"./node_modules/electron-edge-js/**",
]
Electron main.js
// https://github.com/ScottJMarshall/electron-webpack-module-resolution
require("module").globalPaths.push(process.cwd()+'/node_modules');
var edge = require('electron-edge-js');
Related issues to use for troubleshooting:
#39
#74
#21
Packaged Electron app does not require .NET Core to be istalled on a client.
Packaging example based on electron-edge-js-quick-start
.
https://github.com/zenb/electron-edge-js-quick-start
If electron-edge-js
module is used on main Electron thread it will cause Electron app to freeze when executing long-running .NET code even if your C# code is fully async.
To avoid this you can use worker thread packages such as threads.js or piscina
This issue is not present when using Electron IPC
Workaround from #97
main.js
const { fork } = require("child_process"); fork("../child.js", [], { env: {file: 'filename'}, })
child.js
const path = require('path');
const powerpoint = require('office-script').powerpoint;
const filePath = '../../directory/';
powerpoint.open(path.join(${remotePath}${process.env.file}.pptx), function(err) {
if(err) throw err;
});
If electron-edge-js
module is used on main Electron thread refreshing the window (F5, Ctrl+R, Command+R etc) will cause a hard crash in electron-edge-js
module and Electron app.
Currently there is no solution to this issue other than using Electron IPC.
build.bat supports only Electron major versions.
For full documentation see edge-js repo.