Package Exports
- electron-edge-js
- electron-edge-js/lib/edge.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (electron-edge-js) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
.NET and Node.js in-process on Electron
This is a fork of edge-js adapted to support Electron
Overview
electron-edge-js allows you to run .NET code in Electron process on Windows, macOS, and Linux.
Call compiled .NET dlls or inline C# code directly from Electron process.
Version support policy
Electron officially supports 3 latest released versions. You can read more about Electron release schedule and support here Electron Releases.
electron-edge-js support policy
- Windows supports 6 latest Electron releases.
- macOS comes pre-compiled with 6 latest Electron releases. When using Electron version that is not pre-compiled
electron-edge-jsbinaries will be compiled duringnpm installusingnode-gyp. - Linux will will always compile
electron-edge-jsbinaries duringnpm installusingnode-gyp.
NOTE: Due to nan module compatibility issues versions prior to Electron 29 are not supported.
Windows supported versions
| Electron | x86/x64 | arm64 |
|---|---|---|
| 33.x - 38.x | ✔️ | ✔️ |
macOS binaries pre-compiled for
| Electron | x64 | arm64 |
|---|---|---|
| 33.x - 38.x | ✔️ | ✔️ |
Supports
| Electron | x64 | arm64 |
|---|---|---|
| 29.x - 38.x | ✔️ | ✔️ |
Linux
On Linux npm install will compile binaries with correct Electron headers for a given Electron version.
Linux supported versions
| Electron | x64 | arm64 |
|---|---|---|
| 29.x - 38.x | ✔️ | ✔️ |
Other Linux architectures might work but have not been tested.
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();
}
*/});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
Pre-requisites
- Windows: Visual C++ Redistributable
Packaging Electron application
electron-edge-js needs to be specified as an external module, some examples
webpack
webpack.config.js
module.exports = {
target: 'node',
externals: {
'electron-edge-js': 'commonjs2 electron-edge-js',
'edge-cs': 'commonjs2 edge-cs',
},
node: {
__dirname: true,
__filename: true,
},
}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');Vue.js
vue.config.js
module.export = {
pluginOptions: {
electronBuilder: {
externals:["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
https://github.com/agracio/electron-edge-js/issues/138
electron-builder
electron-edge-js should be excluded from rebuild.
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.
Documentation
For full documentation see edge-js repo.