2015-10-30 18 views
95

transformiert wird, ich habe diesen Code:Babel Datei wird kopiert, ohne

"use strict"; 

import browserSync from "browser-sync"; 
import httpProxy from "http-proxy"; 

let proxy = httpProxy.createProxyServer({}); 

und ich habe babel-core und babel-cli global über npm installiert. Der Punkt ist, wenn ich versuche, mit diesem auf meinem Terminal zu kompilieren:

babel proxy.js --out-file proxified.js 

Die Ausgabedatei wird kopiert statt kompiliert (ich meine, es ist das gleiche wie die Quelldatei ist).

Was fehlt mir hier?

+0

hat die 'let' Änderung' var' aber die 'import' Aussagen bleiben? – runspired

Antwort

151

Babel ist ein Transformationsrahmen. Pre-6.x hat bestimmte Transformationen standardmäßig aktiviert, aber mit der zunehmenden Verwendung von Node-Versionen, die nativ viele ES6-Funktionen unterstützen, ist es viel wichtiger geworden, dass Dinge konfigurierbar sind. Standardmäßig führt Babel 6.x keine Transformationen durch. Sie müssen es sagen, welche Transformationen auszuführen:

npm install babel-preset-env 

und

babel --presets env proxy.js --out-file proxified.js 

oder erstellen Sie eine Datei .babelrc

{ 
    "presets": [ 
     "env" 
    ] 
} 

enthält, laufen und führen Sie es genau wie vorher.

env In diesem Fall ist eine Voreinstellung, die im Grunde sagt, alle Standard ES * Verhalten zu ES5 zu kompilieren. Wenn Sie Knoten Versionen verwenden, die einige ES6 unterstützen, können Sie zu prüfen,

{ 
    "presets": [ 
     ["env", { targets: { node: true } }], 
    ] 
} 

tun das Preset nur Prozess, Dinge zu sagen, die nicht unterstützt werden, indem Sie Ihre Node-Version. Sie können auch Browserversionen in Ihre Ziele aufnehmen, wenn Sie Browserunterstützung benötigen.

+14

das ist nützlich. Warum haben sie das nicht in die Dokumentation geschrieben? Ist es sicher, babel-preset global zu installieren? – kidcapital

+0

@kidcapital Die Dokumente enthalten dies, aber nur als eine Randnotiz scheint es. Ich habe viel Zeit damit verbracht, herauszufinden, wie man babel 6.0 bei der ersten Veröffentlichung richtig konfiguriert bekommt. – nick

+0

Der Inhalt dieses Beitrags wurde als Info-Box auf der Setup-Seite nach [PR # 72] (https://github.com/babel/babel.github.io/pull/572/files) hinzugefügt. Eine sehr kleine Verbesserung, aber du musst irgendwo anfangen! Danke Logan. – nick

3

Ich hatte das gleiche Problem mit a andere Ursache:

Der Code, den ich laden wollte, befand sich nicht im Paketverzeichnis, und Babel legt nicht standardmäßig außerhalb des Paketverzeichnisses an.

Ich löste es, indem ich den importierten Code bewegte, aber vielleicht hätte ich auch eine Aufnahmeanweisung in der Babel-Konfiguration verwenden können.

+0

Könnten Sie das näher erläutern? Mein Frontend-Code ist auch nicht "unter dem Paketverzeichnis" und es funktioniert gut. Mein Servercode enthält "importieren", aber babel-cli löst diese nicht auf ... –

+0

Hmm, nicht sicher, worüber ich mich ausdrücken soll? Babel transpilierte nicht. Versuchen Sie, alle Ihre Quellen von Babel config ... – w00t

+0

das Problem, das ich versuche zu lösen ist, dass meine Server-Dateien in mehreren Ordnern orgnanized sind: Ich habe servers.js, dann/api/... Zeug ... Wenn ich laufe aus dem Speicher wird jedes "importieren" oder "erfordern" in diesen Dateien dynamisch aufgelöst. Wenn ich babel über die Befehlszeile ausführe, gebe ich nur eine einzige Datei aus, aber die relativen Importe werden nicht aufgelöst, daher kann ich damit meinen Server nicht ausführen ... –

3

zunächst sicher, Sie haben die folgende node modules:

npm i -D webpack babel-core babel-preset-es2015 babel-preset-stage-2 babel-loader

Als nächstes wird dieses Config Datei (webpack.config.js) zu Ihrem Webpack hinzufügen:

// webpack.config.js 
... 
module : { 
    loaders : [ 
    { 
     test : /\.js$/, 
     loader : 'babel', 
     exclude : /node_modules/, 
     options : { 
     presets : [ 'es2015', 'stage-2' ] // stage-2 if required 
     } 
    } 
    ] 
} 
... 

Referenzen:

Good Luck!

0

gleichen Fehler, andere Ursache:

Transpiling vor gearbeitet hatte und dann funktioniert plötzlich, mit Dateien einfach kopiert werden, wie ist.

Stellt sich heraus, ich öffnete die .babelrc irgendwann und Windows entschied sich .txt an den Dateinamen anhängen. Jetzt wurde .babelrc.txt von babel nicht erkannt. Entfernen der .txt Suffix behoben, dass.

0

beheben Ihre .babelrc

{ 
    "presets": [ 
    "react", 
    "ES2015" 
    ] 
} 
Verwandte Themen