Die Babel-Datei wird kopiert, ohne transformiert zu werden

106

Ich habe diesen Code:

"use strict";

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

let proxy = httpProxy.createProxyServer({});

und ich habe installiert babel-coreund babel-cliglobal über npm. Der Punkt ist, wenn ich versuche, dies auf meinem Terminal zu kompilieren:

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

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

Was fehlt mir hier?

Raul Vallespin
quelle
bleibt die letÄnderung an, varaber die importAussagen bleiben?
Runspired
Verwenden Sie für neuere React- Versionen die neuen Babel-Module: stackoverflow.com/a/53927457/6665568 . Es hat bessere Fehlermeldungen und unterstützt neue Funktionen von reagieren.
Natesh Bhat

Antworten:

165

Babel ist ein Transformationsrahmen. Vor 6.x wurden standardmäßig bestimmte Transformationen aktiviert. Mit der zunehmenden Verwendung von Node-Versionen, die viele ES6-Funktionen nativ unterstützen, ist es jedoch viel wichtiger geworden, dass die Dinge konfigurierbar sind. Standardmäßig führt Babel 6.x keine Transformationen durch. Sie müssen angeben, welche Transformationen ausgeführt werden sollen:

npm install babel-preset-env

und Renn

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

oder erstellen Sie eine .babelrcDatei mit

{
    "presets": [
        "env"
    ]
}

und lass es so laufen, wie du es vorher warst.

envIn diesem Fall handelt es sich um eine Voreinstellung, die grundsätzlich besagt, dass alle Standard-ES * -Verhalten zu ES5 kompiliert werden sollen. Wenn Sie Knotenversionen verwenden, die ES6 unterstützen, sollten Sie dies in Betracht ziehen

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

um die Voreinstellung anzuweisen, nur Dinge zu verarbeiten, die von Ihrer Node-Version nicht unterstützt werden. Sie können auch Browserversionen in Ihre Ziele aufnehmen, wenn Sie Browserunterstützung benötigen.

loganfsmyth
quelle
15
das ist nützlich. Warum haben sie das nicht in die Dokumentation aufgenommen? Ist es sicher, Babel-Preset global zu installieren?
Kidcapital
@kidcapital Die Dokumente enthalten dies, aber nur als Randnotiz, wie es scheint. Ich habe viel Zeit damit verbracht, herauszufinden, wie Babel 6.0 bei der ersten Veröffentlichung wieder richtig konfiguriert werden kann.
Nick
Der Kern dieses Beitrags wurde als Infobox auf der Setup-Seite gemäß PR # 72 hinzugefügt . Eine sehr kleine Verbesserung, aber du musst irgendwo anfangen! Danke Logan.
Nick
7
Soviel zur Konvention über die Konfiguration ... also macht Babel sofort nichts - kopiert nur Dateien?
Alex.p
Bitte stellen Sie eine neue Frage mit allen Informationen zu Ihrem Setup, damit jemand darauf antworten kann.
Loganfsmyth
5

Die meisten dieser Antworten sind veraltet. @babel/preset-envund "@babel/preset-reactsind was Sie brauchen (ab Juli 2019).

mmla
quelle
3

Ich hatte das gleiche Problem mit einer anderen Ursache:

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

Ich habe es gelöst, indem ich den importierten Code verschoben habe, aber vielleicht hätte ich auch eine Inclusion-Anweisung in der Babel-Konfiguration verwenden können.

w00t
quelle
Könnten Sie das näher erläutern? Mein Frontend-Code befindet sich auch nicht "unter dem Paketverzeichnis" und funktioniert einwandfrei. Mein Servercode enthält "import", aber babel-cli löst diese nicht auf ...
Philippe
Hmm, nicht sicher, worauf ich näher eingehen soll? Babel transpilierte nicht. Schauen Sie sich alle Quellen der Babel-Konfiguration an…
w00t
Das Problem, das ich zu lösen versuche, ist, dass meine Serverdateien in mehreren Ordnern organisiert sind: Ich habe servers.js, dann / api / ... stuff ... Wenn ich aus dem Speicher laufe, wird jeder "importiert" oder "benötigt". in diesen Dateien werden dynamisch aufgelöst. Wenn ich babel über die Befehlszeile ausführe, gebe ich nur eine einzelne Datei aus,
Philippe
3

Stellen Sie zunächst sicher, dass Sie Folgendes haben node modules:

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

Fügen Sie dies als Nächstes Ihrer Webpack- Konfigurationsdatei ( webpack.config.js) hinzu:

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

Verweise:

Viel Glück!

Akash
quelle
2

Ab 2020, Jan :

SCHRITT 1: Installieren Sie Babel presets:

yarn add -D @babel/preset-env @babel/preset-react

SCHRITT 2: Erstellen Sie eine Datei: babelrc.jsund fügen Sie Folgendes hinzu presets:

module.exports = {
  // ...
  presets: ["@babel/preset-env", "@babel/preset-react"],
  // ...
}

SCHRITT 3: - Installieren Sie babel-loader:

yarn add -D babel-loader

SCHRITT 4: - Fügen Sie die Loader-Konfiguration hinzu in webpack.config.js:

{
//...
  module: [
    rules: [
      test: /\.(js|mjs|jsx|ts|tsx)$/,
      loader: require.resolve('babel-loader')
    ]
  ]
//...
}

Viel Glück...

Akash
quelle
1

Gleicher Fehler, andere Ursache:

Das Transpilieren hatte zuvor funktioniert und dann plötzlich aufgehört zu arbeiten, wobei Dateien einfach so kopiert wurden, wie sie sind.

Es stellte sich heraus, dass ich das .babelrcirgendwann geöffnet habe und Windows beschlossen hat, .txtan den Dateinamen anzuhängen . Nun, das .babelrc.txtwurde von Babel nicht erkannt. Durch Entfernen des .txtSuffixes wurde das behoben.

Robro
quelle
0

Repariere deine .babelrc

{
  "presets": [
    "react",
    "ES2015"
  ]
}
OSP
quelle
0

Im Jahr 2018:

Installieren Sie folgende Pakete, falls Sie dies noch nicht getan haben:

npm install babel-loader babel-preset-react

webpack.config.js

{
    test: /\.jsx?$/,
    exclude: /node_modules/,
    use: [
      {
        loader: 'babel-loader',
        options: {
          presets: ['es2015','react']  // <--- !`react` must be part of presets!
        }
      }
    ],
  }
Legenden
quelle
0

Ultimative Lösung

Ich habe 3 Tage damit verschwendet

import react from 'react' unexpected identifier

Ich habe versucht , Pakete zu ändern webpack.config.jsund package.jsonDateien hinzuzufügen .babelrc, zu installieren und zu aktualisieren npm. Ich habe viele, viele Seiten besucht, aber nichts hat funktioniert.


Was hat funktioniert? Zwei Wörter: npm start. Das stimmt.

Führen Sie die

npm start 

Befehl im Terminal , um einen lokalen Server zu starten

...

(Beachten Sie, dass es möglicherweise nicht sofort funktioniert, aber vielleicht erst, nachdem Sie an npm gearbeitet haben, da ich vor dem Ausprobieren alle Änderungen in diesen Dateien gelöscht hatte und es funktioniert hat. Wenn Sie also wirklich fertig sind, behandeln Sie es als Ihr letztes Resort )


Ich habe diese Informationen auf dieser ordentlichen Seite gefunden . Es ist auf Polnisch, aber Sie können gerne Google Translate verwenden.

Aduku
quelle