2016-05-04 8 views
0

Ich verwende Babel für ES2015-Moduldefinitionen.Standardvariable mit BabelJS exportieren

Ich habe eine Datei a.js:

require('babel-core/register')({presets: ['es2015']}) 
require('./b') 

Welche b.js

export default b =() => true 

Babel diese kompiliert

"use strict"; 

Object.defineProperty(exports, "__esModule", { 
    value: true 
}); 

exports.default = b = function Main() { 
    return true; 
}; 

erfordert eine Datei aber dann einen Fehler aus:

ReferenceError: b is not defined 
    at Object.<anonymous> (b.js:1:16) 
+1

Hat Ihre kompilierte Ausgabe eine Anweisung use strict? (Es sollte.) Können Sie näher erläutern, was Sie meinen, wenn Sie den kompilierten Code direkt ausführen? Was versuchen Sie für lokale Bindungen/Exporte zu erreichen? Benötigen Sie eine lokale Bindung an die Sache, die Sie als Standard exportieren? – JMM

+1

Ist die Eingabe der gesamte Inhalt von 'b.js' oder ein Auszug? – JMM

+0

Ah meinst du, Babel zeigt mir nur die Fehlerzeile nach der Kompilierung, aber nicht die erste Zeile, die "" strict "verwenden sollte;'? Das könnte ja sein. Ich kopierte einfach die Zeile, die es mir zeigte und versuchte es mit Node auszuführen, was funktionierte, aber es wäre wahrscheinlich nicht, wenn es strikter Modus wäre ... Jedenfalls wollte ich babel verwenden, um eine anonyme Funktion zu erstellen (schönere Syntax, keine Rückkehr) usw.) aber mit einem Namen (babel kompiliert 'a =() =>' zu 'a = Funktion a() {}' –

Antwort

3

Ich glaube, die Frage von babel kommt Zugabe strict mode als Sie verweisen dann auf eine nicht deklarierte Variable. Ändern zu:

const b =() => true 
export default b; 

reparierte es für mich.

+0

Ja, scheint zu sein. Also, wenn ich Willst du einen Namen für eine Pfeilfunktion, muss ich den 'Export Standard' von vor nach hinter der Funktionsdefinition verschieben? –

+0

Scheint so zu sein. Alternativ können Sie 'export default() => true' und' import b from "./b" 'verwenden. –

+1

@K ..: 'export default b =() => true' ist im Grunde das gleiche wie' module.exports = (b =() => true) '. Vielleicht wird dadurch klarer, was passiert. Sie könnten die Variable auch vorher deklarieren ('let b;'), aber ich würde diesen guten Stil nicht berücksichtigen. –

0

Wenn dies das gesamte Modul ist und es gibt keine globales b, dann ist dies ein Laufzeitfehler, so dass das erste Problem sein könnte:

export default b =() => true 
+0

Warum wird das dann ohne Fehler kompiliert? –

+1

Ich habe mich geirrt zu sagen, es ist ein ungültiger Eingang - ich habe update die Antwort zu reflektieren, dass in Ihrem Fall ist es wahrscheinlich ein Laufzeitfehler. – JMM

Verwandte Themen