2016-05-20 17 views
1

Ich habe eine Aurelia-Anwendung in Elektron ausgeführt. Meine Quelldateien sind Typoskript und ich habe Umgebungs typings für Elektron und Knoten.Aurelia: mit ES6-Import für Elektron + Typoskript

Da ich weiß, ich kompiliere für den Einsatz auf Elektron, transpiliere ich mein Typoskript zu es6 und mit Systemmodul laden; das bedeutet, ich kann den transpiler von system.js von abschalten. Ich benutze system.js und jspm, weil dieser Ansatz Aurelia vorangetrieben hat.

Also in meiner ts Datei: Ich möchte in der Lage sein zu tun:

import {remote} from 'electron'; 

Leider system.js weiß nichts über das Modul Elektron und nicht während der Laufzeit. TypeScript dagegen ist vollkommen glücklich, weil ich die Typings für Elektron und Knoten eingerichtet habe; Ich bekomme auch volle Intelligenz in VSCode.

Hinweis: Wenn Sie versuchen, var electron = require('electron'); in der Kopfzeile zu tun, stört system.js es und es wird nicht geladen. You can place that 'require('electron')' within a class or function and it will work, aber ich finde dieses Ideal nicht.

Frage:Wie kann ich system.js erhalten, um das "Elektronen" -Modul korrekt zurückzugeben, das nur verfügbar ist, wenn Sie die App in Elektron selbst ausführen?

Antwort

0

Eine Lösung --hopefully gibt es eine bessere way-- ich habe kommen mit ist das Elektron-Modul für system.js Shim und verbinden Sie sie direkt auf den Inhalt der require('electron'):

Elektron. js

System.register([], function (exports_1, context_1) { 
    "use strict"; 
    var __moduleName = context_1 && context_1.id; 
    var electron; 
    return { 
     setters: [], 
     execute: function() { 
      electron = require('electron'); 
      exports_1("default", electron); 

      Object.keys(electron).forEach(function (key) { 
       exports_1(key, electron[key]); 
      }); 
     } 
    } 
}); 

dies effektiv wickelt den internen Elektron-Modul und ermöglicht system.js darüber wissen. Es klappt; aber hoffentlich gibt es einen eleganteren/eingebauten Weg, den andere kennen.

Sie benötigen keine Zuordnungen oder Änderungen am Typ cypt, da import {remote} from 'electron' als letztes Mittel versucht, electron.js aufzulösen.

+0

sieht aus wie es mit der nächsten Version von jspm einen besseren Weg geben wird: https://github.com/jspm/jspm-cli/issues/1837 –