2015-07-05 9 views
6

i ES6 js Dateien verwenden, die von großem Schluck dann kompiliert werden (browserify/babel), Beispiel einer ES6 Datei ist:Electron & ES6 wie erforderlich remote/ipc zu implementieren, wenn Module schluck und ES6 mit

Ich habe eine normale App.js, die verwendet wird, um das Hauptfenster usw. einzurichten. Dann werden die HTML-Seiten eine main.min.js-Datei verwenden, die im Grunde mit all meinen ES6-Klassen kompiliert in einer Datei ist:

loader .es6

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

new Main() 

Main.es6

Datei Datei

Wenn kompiliert und ausgeführt wird alles funktioniert gut und alles ist gut ... Aber wie ich dachte, wenn ich die "IPC", "Remote" -Module implementieren möchte, habe ich Probleme mit der Zusammenstellung als sie nicht finden können diese Module, entweder durch die require() oder import.. Methoden innerhalb meiner Klassen.

damit folgendes nicht:

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

new Main() 

oder

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

new Main() 

dies möglich ist, zu tun oder zu erreichen, oder nee mehr Gedanken muss und bitte den normalen js zurück.

Irgendwelche Ideen/Rat würden großer Dank

EDIT sein: fügen Sie die Fehlerdetails

Eine Beispieldatei in Frage Main.es6

den zusätzlichen var var Remote = require('remote') an der Spitze sehen dies die folgenden Fehler verursacht.

sogar mit 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

* Wie * schlägt es fehl? Wie sieht die Export-Syntax dieses "Remote" -Moduls aus? Bitte zeigen Sie uns die genauen Dateien (wenn Sie sie verlinken müssen) anstelle Ihres gesamten Projekts. – Bergi

+0

Wo befindet sich das "Remote" -Modul? Meintest du "/ remote"? – Bergi

+0

sein Teil (ich glaube) der Elektron-Prebuilt-Modul eingerichtet. Ass läuft es in nativen js-Dateien, als würde alles funktionieren ... es ermöglicht Ihnen, auf den Hauptelektronenprozess und Module wie 'var ipc = remote.require ('ipc)' zuzugreifen, es ist vielleicht noch nicht möglich, also muss man normale ES5-Wege benutzen. –

Antwort

4

gut gespielt, und ich habe es geschafft, dies in einer Art und Weise zu arbeiten:

Im Grunde habe ich die Fernbedienung und ipc Module innerhalb der HTML-Seite, dann passieren in diese, in meine Klasse für diese Seite.

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

    ..... 

Die Dateien können in diesem Branch betrachtet werden: Ehrlich gesagt

4

, ist der einfachste Weg, dies zu lösen, ist nicht Ihre Binärdateien minify oder verwenden browserify . Electron hat bereits require im globalen Bereich - alles, was Sie tun müssen, ist Ihre Dateien über Babel zu ES6 => ES5 kompilieren sie (electron-compile macht dies auch trivial einfach). Ihre import Anweisung wird in eine require übersetzt, die Electron automatisch aus der Box behandelt.

Im Allgemeinen sind viele Optimierungsstrategien, die Sie im Web wie Minification oder Verkettung gewohnt sind, unnötig oder machen keinen Sinn in Electron, Sie können sie meistens einfach nicht machen!

+0

danke für den Kommentar, stimme voll und ganz zu, aber versuche nur Dinge zu benutzen, die ich täglich tue usw., ich stimme dir insbesondere in vielerlei Hinsicht zu und war genau das, was ich am Ende getan habe/werde., Nochmals vielen Dank. +1 –

6

In meinem Fall bin ich mit browserify mit babelify, wenn ich versuche:

var remote = require('remote')

würde ich bekam Fehler:

Error: Cannot find module 'remote' from xxx

Aber wenn ich versuche

var remote = window.require('remote')

Es funktioniert.

import remote from 'remote' funktioniert nicht, scheint wie browserify nicht diese nativen Module nicht in package.json definiert finden.