2015-07-05 21 views
6

sto usando file ES6 js che vengono poi compilati da gulp (browserify/babel), esempio di un file ES6 è:Electron & ES6 come implementare richiedono remoto/IPC quando si utilizzano moduli Gulp e ES6

ho un normale app.js che viene utilizzato per impostare la finestra principale, ecc. Quindi le pagine html utilizzeranno un file main.min.js che è sostanzialmente costituito da tutte le mie classi ES6 compilate in un unico file:

loader .es6 del file

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

new Main() 

Main.es6

import Vue from 'vue'; 

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

Quando compilato ed eseguito questo tutto funziona bene e tutto è buono ... Ma, come ho pensato che se voglio realizzare il 'IPC', i moduli 'remoti', sto avendo problemi con la compilazione in quanto non riesce a trovare questi moduli, tramite i metodi require() o import.. all'interno delle mie classi.

così facendo il seguente esito negativo:

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

new Main() 

o

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

new Main() 

Questo è possibile fare o raggiungere, o no ha bisogno di più il pensiero e tornare a js normali per favore.

Tutte le idee/consiglio sarebbe grande grazie

EDIT: aggiungere i dettagli di errore

Un file di esempio in questione Main.es6

vedere la var aggiunto var Remote = require('remote') in alto questo fa sì che il seguente errore.

anche utilizzando 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' } } 
+0

* Come * fallisce? Che aspetto ha la sintassi di esportazione di quel modulo 'remoto'? Indicaci i file esatti (se devi collegarli) invece del tuo intero progetto. – Bergi

+0

Quindi dove si trova il modulo 'remote'? Intendevi './Remote'? – Bergi

+0

la sua parte (credo) del set di moduli pre-integrati di elettroni. Ass che lo esegue in file js nativi come tutto funzionerebbe ... ti permette di accedere al processo e ai moduli dell'elettrone principale come 'var ipc = remote.require ('ipc)', potrebbe non essere ancora possibile, così dovrà usare i normali modi ES5. –

risposta

4

ben suonato e sono riuscito a farlo funzionare in un modo:

Fondamentalmente ho impostato i moduli remoti e IPC all'interno della pagina html, poi passare quelli, nella mia classe per quella pagina.

main.html

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

Main.js - Class File

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

    ..... 

I file possono essere visualizzati all'interno di questo Branch:

4

Onestamente, il modo più semplice per risolvere questo è quello di non minify i binari o utilizzare browserify . Electron ha già require nell'ambito globale: tutto ciò che devi fare è eseguire i tuoi file tramite Babel in ES6 => ES5 li compila (electron-compile rende anche questo banalmente semplice). La tua dichiarazione import verrà convertita in un require, che Electron gestirà automaticamente dalla scatola.

In generale, molte strategie di ottimizzazione a cui siete abituati sul web come la minificazione o la concatenazione non sono necessarie o non hanno senso in Electron, potete semplicemente non farlo!

+0

grazie per il commento, sono completamente d'accordo, ma solo provando a usare cose che faccio ogni giorno ecc., Sono d'accordo con te in molti modi specialmente ed era esattamente quello che stavo/probabilmente farò alla fine., Grazie ancora. +1 –

6

Nel mio caso, sto usando browserify con babelify, se ho provato:

var remote = require('remote')

avrei avuto errore:

Error: Cannot find module 'remote' from xxx

Ma se ho cercato

var remote = window.require('remote')

Funziona.

import remote from 'remote' non funziona, sembra che browserify non riesca a trovare quei moduli nativi non definiti in package.json.