2016-10-13 20 views
1

Wenn ich eine ES6 JS-Datei (test.js) haben ...ES6 Exportieren und Importieren einer Funktion

export default function() { 
    let foo = "test" 
    return foo 
} 

Mit Babel, ist es möglich, transpile und sie in einer Datei index.html nennen

<script src="js/text-min.js"></script> 

Und anfangen, die Funktion zu verwenden, ohne sie in eine andere js-Datei importieren zu müssen? Für Ex. Das nächste Skript-Tag nach hätte den folgenden Code. Dies ist im Einsatz mit Webpack -

<script> 
    var bar = new foo(); 
    console.log(bar); 
</script> 
+1

Sicher, verwenden Sie die Optionen, um den Standard als eine Variable Ihrer Wahl verfügbar zu machen. – Bergi

Antwort

0

Die transpiled Version des obigen Code wie folgt erzeugt,

"use strict"; 

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

    exports.default = function() { 
    var foo = "test"; 
    return foo; 
    }; 

Wie Sie sehen können, ist es eine Eigenschaft hinzufügen Objekt mit dem Namen __esModule zu exportieren. Nichts anderes. Sie haben also keine Möglichkeit, diese Standardfunktion einzuschließen, ohne Import oder Require zu verwenden.

+0

Wenn ich ein in einer Datei transpiliertes Plugin erstellen möchte, muss in diesem Fall ein Import vor der Übertragung erfolgen? Wären die Eigenschaften dann als Datei zugänglich? – Yasir

+0

Wenn ich Babel/Webpack nutze, um auf eine Datei zu reduzieren, ist es dann möglich, als Skript und Zugriffsmethoden von der komprimierten Datei in einer anderen Datei anzuhängen? – Yasir

+0

@Yasir Sie verwenden also Webpack? Du hättest das sagen sollen. – Bergi

0

Was Sie eigentlich suchen, ist eine globale Variable (was wahrscheinlich keine gute Idee ist). Zum Beispiel:

Modul 1:

import {foo} from 'foo'; // still an ES6 module, just no export 

// global variable 'bar' 
window.bar = (...args) => foo(...args) + 6; 

Dann in Modul 2:

bar(1, 3, 5); 

Beachten Sie, dass dies den gesamten Sinn der Verwendung von Modulen besiegt und soll sehr sparsam eingesetzt werden.

+0

das macht Sinn. Der beabsichtigte Endanwendungsfall besteht darin, es6 als es5 js zu behandeln, die Sie per Skript-Tag hinzufügen. Die Idee ist, dass Sie die ES6-Methode haben, es zu exportieren/zu importieren, und einen Standard-es5-Weg. als Plugin gedacht. – Yasir

+0

Es wird interessant sein, zu sehen, wie all dies interoperiert, sobald einige Browser tatsächliche Implementierungen versenden. –

Verwandte Themen