electron-edge-js
v33.0.5
Published
Edge.js: run .NET and Node.js in-process on Electron
Downloads
4,675
Maintainers
Readme
.NET and Node.js in-process on Electron
This is a fork of edge-js adapted to support Electron
Windows binaries pre-compiled for
| Electron | Node.Js | x86/x64 | arm64 | | --------------- | ---------------- | ------------------ | ------------------ | | Electron 29.x | v20.x | :heavy_check_mark: | :heavy_check_mark: | | Electron 30.x | v20.x | :heavy_check_mark: | :heavy_check_mark: | | Electron 31.x | v20.x | :heavy_check_mark: | :heavy_check_mark: | | Electron 32.x | v20.x | :heavy_check_mark: | :heavy_check_mark: | | Electron 33.x | v20.x | :heavy_check_mark: | :heavy_check_mark: |
- 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.
Usage is the same as edge-js, replace require('edge-js')
with require('electron-edge-js')
:
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();
}
*/});
Why use electron-edge-js
?
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.
Quick start
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
Packaging Electron application
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: true,
__filename: true,
},
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:
https://github.com/agracio/electron-edge-js/issues/39
https://github.com/agracio/electron-edge-js/issues/74
https://github.com/agracio/electron-edge-js/issues/21
electron-forge
electron-forge example based on electron-edge-js-quick-start
https://github.com/agracio/electron-edge-js-quick-start-forge
Async execution
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;
});
Window refresh issue
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
build.bat supports only Electron major versions.
Documentation
For full documentation see edge-js repo.