2014-12-15 6 views
20

Wie kann ich ES6-Module verketten?Wie verkette ich ES6-Module?

var foo = 2; // This would normally be scoped to the module. 
export function Bar() {} 

// ...concatenate... 

import { Bar } from 'javascripts/bar' //This file no longer exists in the concatenated scenario. 
export function Bam() {} 
+0

Was meinst du mit '// Diese Datei existiert nicht mehr in der verketteten scenario.'? Sie müssen es aus einer Datei importieren oder den Inhalt inline einschließen. Versuchen Sie, Bar ohne eine separate Datei zu importieren, um Bar in zu definieren? – DaveS

+0

Was meinst du mit concat? Was ist falsch daran, eine dritte Datei zu erstellen, die beide Elemente der beiden Module exportiert? –

+0

@DaveS Ich meine, dass die Datei 'Javascripts/bar' nach der Verkettung nicht mehr existiert (weil sie verkettet wurde). – Ben

Antwort

1

Ich würde vorschlagen, dass Sie einen Blick auf http://webpack.github.io nehmen und es dann mit babel kombinieren.

alternativ können Sie es mit babel alleine tun:

https://babeljs.io/docs/usage/cli/

+2

Können Sie beschreiben, wie es allein mit babel cli zu erreichen? – Gabriel

+0

Sieht so aus, als ob babel Dateien verketten kann, aber es wird nicht inline importiert/benötigt. Diese Import/Require-Aufrufe sind weiterhin in der verketteten Datei vorhanden. Sieht so aus, als müssten Sie wirklich etwas wie Webpack verwenden, um alle Skriptabhängigkeiten aufzulösen. –

4

Wenn das, was Sie eine einzelne JavaScript-Datei tun möchten, ist zu erstellen, die intern nicht ES6-Module verwenden, so dass Sie es mit Browsern verwenden/node heute, dann empfehle ich die Verwendung von Esperanto (vollständige Offenlegung, ich bin ein Betreuer des Projekts). Es erlaubt Ihnen, ein Bündel zu erstellen, die alle Dateien zusammen ohne die Verwendung eines Laders wie Sie verkettet würde mit so etwas wie browserify oder webpack bekommen. Dies führt in der Regel in kleineren Code (kein Lader), besser Beseitigung von totem Code (bei Verwendung eines minifier wie Google Closure Compiler oder UglifyJS verwenden), und eine bessere Leistung als die JS-Interpreter besser in der Lage ist, das Ergebnis zu optimieren.

Hier ist ein Beispiel für die Verwendung, aber beachten Sie, dass es plenty of tools to integrate Esperanto into your workflow:

var fs = require('fs'); 
var esperanto = require('esperanto'); 

esperanto.bundle({ 
    base: 'src', // optional, defaults to current dir 
    entry: 'mean.js' // the '.js' is optional 
}).then(function (bundle) { 
    var cjs = bundle.toCjs(); 
    fs.writeFile('dist/mean.js', cjs.code); 
}); 

Dieses Beispiel aus dem wiki page on bundling ES6 modules genommen wird.

+2

Link Esperantojs.org geht zu einigen Porno/Spam-Website –