electron-edge-js
TypeScript icon, indicating that this package has built-in type declarations

30.0.2 • Public • Published

.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 Version
Electron 19.x v16.14.2
Electron 20.x v16.15.0
Electron 21.x v16.16.0
Electron 22.x v16.17.1
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.x v20.11.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.

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();
    }
*/});

Requirements (Windows)

You must install Microsoft Visual C++ Redistributable (x86)

Why use electron-edge-js?

Electron is built using specific version of Node.js. In order 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: 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');

Packaging example based on electron-edge-js-quick-start.
https://github.com/zenb/electron-edge-js-quick-start

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

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;
});

Build

build.bat supports only Electron major versions.

Documentation

For full documentation see edge-js repo.

Package Sidebar

Install

npm i electron-edge-js

Weekly Downloads

695

Version

30.0.2

License

MIT

Unpacked Size

15.8 MB

Total Files

160

Last publish

Collaborators

  • agracio