Electron & ES6 как реализовать require remote / ipc при использовании модулей gulp и ES6

Я использую файлы ES6 js, которые затем компилируются gulp( browserify / babel), пример файла ES6:

у меня есть нормальное приложение.js, который используется для настройки главного окна и т. д.. Затем html-страницы будут использовать main.минута.JS-файл, который в основном состоит из всех моих классов ES6, скомпилированных в один файл:

погрузчик.файл es6

import Main from  './pages/Main.es6'

new Main()

Главная.файл es6

 import Vue from 'vue';

export default class Main extends Vue{
   constructor() {...}
   .....
}

при компиляции и запуске все работает нормально, и все хорошо... Но как я думал, если я хочу реализовать модули "IPC", "Remote", у меня возникают проблемы с компиляцией, поскольку они не могут найти эти модули, либо через require() или import.. методы в моем классе.

таким образом, следующее не удается:

 import Remote from 'remote'
 import Main from  './pages/Main.es6'

 new Main()

или

var Remote = require('remote')
import Main from  './pages/Main.es6'

new Main()

это можно сделать или достичь, или не нужно больше думать и возвращаться к нормальному js, пожалуйста.

любые идеи / советы были бы большое спасибо

EDIT: добавить ошибку подробности

пример файла в вопросе Главная.es6

см. добавленный var var Remote = require('remote')вверху это вызывает следующую ошибку.

даже с помощью import Remote from 'remote'

{ [Error: Cannot find module 'remote' from '/Volumes/DAVIES/ElectronApps/electron-vuejs-starter/resources/js/pages']
 stream:
  { _readableState:
  { highWaterMark: 16,
    buffer: [],
    length: 0,
    pipes: [Object],
    pipesCount: 1,
    flowing: true,
    ended: false,
    endEmitted: false,
    reading: true,
    sync: false,
    needReadable: true,
    emittedReadable: false,
    readableListening: false,
    objectMode: true,
    defaultEncoding: 'utf8',
    ranOut: false,
    awaitDrain: 0,
    readingMore: false,
    decoder: null,
    encoding: null,
    resumeScheduled: false },
   readable: true,
   domain: null,
   _events:
  { end: [Object],
    error: [Object],
    data: [Function: ondata],
    _mutate: [Object] },
  _maxListeners: undefined,
  _writableState:
   { highWaterMark: 16,
    objectMode: true,
    needDrain: false,
    ending: true,
    ended: true,
    finished: true,
    decodeStrings: true,
    defaultEncoding: 'utf8',
    length: 0,
    writing: false,
    corked: 0,
    sync: false,
    bufferProcessing: false,
    onwrite: [Function],
    writecb: null,
    writelen: 0,
    buffer: [],
    pendingcb: 0,
    prefinished: true,
    errorEmitted: false },
  writable: true,
  allowHalfOpen: true,
  _options: { objectMode: true },
  _wrapOptions: { objectMode: true },
   _streams: [ [Object] ],
  length: 1,
   label: 'deps' } }

3 ответов


в моем случае, я использую browserify С babelify, если бы я попробовал:

var remote = require('remote')

Я бы получил ошибку:

ошибка: не удается найти модуль "удаленный" из xxx

но если бы я попытался

var remote = window.require('remote')

это работает.

import remote from 'remote' не работает, похоже, browserify не может найти эти собственные модули, не определенные в package.json.


хорошо играл, и мне удалось заставить это работать таким образом:

в основном я устанавливаю модули remote и ipc на странице html, а затем передаю их в свой класс для этой страницы.

main.HTML-код

 <script>
   var remote = require('remote');
   var ipc = require('ipc');
   new Main(ipc);
 </script>

Main.файл js-класса

 export default class Main extends Vue{
  constructor(ipc) {
   ....
   ipc.send('listener here','message here');

   .....

файлы можно просмотреть в этой филиала:


честно говоря, самый простой способ решить эту проблему-не уменьшать двоичные файлы или использовать browserify. У электрона уже есть require в глобальной области-все, что вам нужно сделать, это запустить файлы через Babel в ES6 => ES5 скомпилировать их (electron-compile делает это тривиальная задача). Ваш import оператор будет переведен на require, который Электрон автоматически отрегулирует из коробки.

В общем, много стратегий оптимизации, к которым вы привыкли сеть, как минификация или конкатенация, не нужна или не имеет смысла в Electron, вы можете в основном просто не делать их!