2016-07-28 7 views
0

Also habe ich etwas Codierung in ES6 gemacht und versucht herauszufinden, wie das Import/Export-Zeug funktioniert.Ist es zu früh, ES6-Import und -Export in Meteor zu verwenden?

/lib/globalcode.js

'use strict'; 

let globalCode = { 

    add: (x,y) => { 
     return add(x,y); 
    } 

}; 

let add = (x,y) => { 
    return x + y; 
}; 

class Animal { 

    constructor(name) { 
    this.name = name; 
    } 

    speak() { 
    console.log(this.name + ' makes a noise.'); 
    } 

}; 

export { Animal, globalCode }; 

/client/index.js

import { Animal, globalCode } from '/lib/globalcode.js'; 

Template.index.onRendered(() => { 

    let animal = new Animal('cat'); 
    animal.speak(); 

    console.log(globalCode.add(5,6)); 

}); 

Wenn ich in Chrome Dev-Tools die Ausgabe von animal.speak() und console.log(globalCode.add(5,6))tun auftauchen, aber wenn ich manuell eingeben let animal = new Animal('cat') und globalCode.add(5,6) in die Konsole Ich bekomme Animal not defined und globalCode nicht definiert.

Offenbar unterstützt kein Browser offiziell ES6 Module noch nicht, aber ich bin verwirrt, warum console.log(globalCode.add(5,6)) und let animal = new Animal('cat'); Arbeit, wenn sie von index.js laufen, aber nicht, wenn sie aus dem Browser ausgeführt werden.

Die obige Einschränkung macht das Debugging sehr schwierig. Ist es am besten, sich vorerst von ES6-Modulen fern zu halten? Und werden sie auf der Server-Seite von Meteor vollständig unterstützt?

Antwort

2

Importe erstellen lexikalische Bindungen, die trotz Ihrer Namen nicht global sind. (Tatsächlich sind auch keine var Bindungen in Modulen.) Wenn Sie sie auf dem globalen Objekt installieren möchten, können Sie window.globalCode = globalCode oder ähnliches in index.js setzen.

0

Ich denke, das Problem ist eine Variable Scoping-Problem. Wenn Sie an der Spitze der "Client/Index-Seite importieren waren, ich glaube, Sie das gewünschte Ergebnis erhalten würden:

import { Animal, globalCode } from '/lib/globalcode.js'; 

Template.index.onRendered(() => { 

    let animal = new Animal('cat'); 
    animal.speak(); 

    console.log(globalCode.add(5,6)); 

}); 

Und Ihre Frage zu es6 zu beantworten, ich benutze es überall kann ich und würde empfehlen, das Gleiche.

+0

Bah, das Gleiche passiert immer noch. Ich habe das OP bearbeitet, um meinen 'Import' an den Anfang der Datei zu bringen. – fuzzybabybunny