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, а затем передаю их в свой класс для этой страницы.
<script>
var remote = require('remote');
var ipc = require('ipc');
new Main(ipc);
</script>
export default class Main extends Vue{
constructor(ipc) {
....
ipc.send('listener here','message here');
.....
файлы можно просмотреть в этой филиала:
честно говоря, самый простой способ решить эту проблему-не уменьшать двоичные файлы или использовать browserify. У электрона уже есть require
в глобальной области-все, что вам нужно сделать, это запустить файлы через Babel в ES6 => ES5 скомпилировать их (electron-compile делает это тривиальная задача). Ваш import
оператор будет переведен на require
, который Электрон автоматически отрегулирует из коробки.
В общем, много стратегий оптимизации, к которым вы привыкли сеть, как минификация или конкатенация, не нужна или не имеет смысла в Electron, вы можете в основном просто не делать их!