2016-05-15 7 views
3

Gibt es eine Option, Elm mitzuteilen, auf welches Modulsystem Sie während der Kompilierungszeit abzielen? Z.B. etwas wie eine --target Flagge. Ich muss zugeben, dass ich nicht so viel in elm-make gegraben habe.Angeben eines spezifischen Modulsystems beim Kompilieren von Elm (vs. Laufzeitprüfungen)

Derzeit scheint es, dass es nur während der Laufzeit auftritt:


Für meine Situation Ich bin:

  • Mit Electron definiert seine eigene module Objekt und eine globale window.
  • Verwenden Sie nur Elm für einen Teil des Projekts (Siehe HTML interop).

Standardmäßig werden die compiled output standardmäßig auszusetzen Elm auf module.exports:

if (typeof define === "function" && define['amd']) 
{ 
    define([], function() { return Elm; }); 
    return; 
} 

if (typeof module === "object") 
{ 
    module['exports'] = Elm; 
    return; 
} 

var globalElm = this['Elm']; 
if (typeof globalElm === "undefined") 
{ 
    this['Elm'] = Elm; 
    return; 
} 

In Debug-Tools:

TronWM exposed in module.exports vs window

Stattdessen möchte ich es belichten auf this/window und überschreiben Sie nicht module.exports mit dem Elm-Objekt.

konnte ich eine Lösung, die Mißbräuche der AMD-Check hacken zusammen:

<script> 
    window.define = (arr, fn) => { 
     const Elm = fn(); 
     window.Elm = Elm; 
    }; 
    window.define.amd = true; 
    </script> 
    <script src="build/tronwm.js"></script> 
    <script> 
    const node = document.getElementById('elm-render'); 
    const app = window.Elm.TronWM.embed(node); 
    </script> 

enter image description here


Das ist für jetzt funktioniert, aber neugierig von alternativen Lösungen, falls vorhanden.

Antwort

1

Ab 0.18, nein gibt es nicht. Der Elm-Compiler weiß nichts über Details von JS Loaders etc.