From 2c93385fcee26ad86b9edb2fb63aa420baa665c1 Mon Sep 17 00:00:00 2001 From: Hinton Date: Tue, 29 Dec 2020 20:53:29 +0100 Subject: [PATCH] Fix electron error on native messaging --- src/entry.ts | 33 +++++++++++++++++++++++++++++++++ src/main.ts | 23 +---------------------- webpack.main.js | 2 +- 3 files changed, 35 insertions(+), 23 deletions(-) create mode 100644 src/entry.ts diff --git a/src/entry.ts b/src/entry.ts new file mode 100644 index 00000000..2c6704a3 --- /dev/null +++ b/src/entry.ts @@ -0,0 +1,33 @@ +import { NativeMessagingProxy } from './proxy/native-messaging-proxy'; + +// We need to import the other dependencies using `reqiuire` since import will +// generate `Error: Cannot find module 'electron'`. The cause of this error is +// due to native messaging setting the ELECTRON_RUN_AS_NODE env flag on windows +// which removes the electron module. This flag is needed for stdin/out to work +// properly on Windows. + +if (process.argv.some(arg => arg.indexOf('chrome-extension://') !== -1 || arg.indexOf('{') !== -1)) { + if (process.platform === 'darwin') { + // tslint:disable-next-line + const app = require('electron').app; + + app.on('ready', () => { + app.dock.hide(); + }); + } + + process.stdout.on('error', (e) => { + if (e.code === 'EPIPE') { + process.exit(0); + } + }); + + const proxy = new NativeMessagingProxy(); + proxy.run(); +} else { + // tslint:disable-next-line + const Main = require('./main').Main; + + const main = new Main(); + main.bootstrap(); +} diff --git a/src/main.ts b/src/main.ts index 5ad6540c..d2d2350a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,4 +1,4 @@ -import { app, globalShortcut } from 'electron'; +import { app } from 'electron'; import * as path from 'path'; import { I18nService } from './services/i18n.service'; @@ -19,7 +19,6 @@ import { TrayMain } from 'jslib/electron/tray.main'; import { UpdaterMain } from 'jslib/electron/updater.main'; import { WindowMain } from 'jslib/electron/window.main'; import { NativeMessagingMain } from './main/nativeMessaging.main'; -import { NativeMessagingProxy } from './proxy/native-messaging-proxy'; export class Main { logService: ElectronLogService; @@ -183,23 +182,3 @@ export class Main { }); } } - -if (process.argv.some(arg => arg.indexOf('chrome-extension://') !== -1 || arg.indexOf('{') !== -1)) { - if (process.platform === 'darwin') { - app.on('ready', () => { - app.dock.hide(); - }); - } - - process.stdout.on('error', (e) => { - if (e.code === 'EPIPE') { - process.exit(0); - } - }); - - const proxy = new NativeMessagingProxy(); - proxy.run(); -} else { - const main = new Main(); - main.bootstrap(); -} diff --git a/webpack.main.js b/webpack.main.js index ab1b1c37..2f8264f7 100644 --- a/webpack.main.js +++ b/webpack.main.js @@ -41,7 +41,7 @@ const main = { __filename: false, }, entry: { - 'main': './src/main.ts', + 'main': './src/entry.ts', }, optimization: { minimize: false,