Plik Babel jest kopiowany bez przekształcania

106

Mam ten kod:

"use strict";

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

let proxy = httpProxy.createProxyServer({});

i zainstalowałem babel-corei babel-cliglobalnie przez npm. Chodzi o to, że próbuję skompilować to na moim terminalu:

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

Plik wyjściowy jest kopiowany zamiast kompilacji (mam na myśli to, że jest taki sam jak plik źródłowy).

Czego tu brakuje?

Raul Vallespin
źródło
robi letzmianę do varlecz importstwierdzenia pozostają?
runspired
W przypadku nowszych wersji reaguj, użyj nowych modułów babel: stackoverflow.com/a/53927457/6665568 . Ma lepsze komunikaty o błędach i obsługuje nowe funkcje reagowania.
Natesh bhat

Odpowiedzi:

165

Babel to struktura transformacji. Pre-6.x domyślnie włączał pewne transformacje, ale przy zwiększonym wykorzystaniu wersji Node, które natywnie obsługują wiele funkcji ES6, stało się o wiele ważniejsze, aby rzeczy były konfigurowalne. Domyślnie Babel 6.x nie wykonuje żadnych przekształceń. Musisz mu powiedzieć, jakie transformacje uruchomić:

npm install babel-preset-env

i biegnij

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

lub utwórz .babelrcplik zawierający

{
    "presets": [
        "env"
    ]
}

i uruchom go tak, jak wcześniej.

envw tym przypadku jest to ustawienie wstępne, które zasadniczo mówi, że należy skompilować wszystkie standardowe zachowania ES * do ES5. Jeśli używasz wersji Node, które obsługują niektóre ES6, możesz rozważyć zrobienie tego

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

powiedzieć ustawieniu wstępnemu, aby przetwarzał tylko te rzeczy, które nie są obsługiwane przez twoją wersję Node. Możesz również dołączyć wersje przeglądarki do celów, jeśli potrzebujesz obsługi przeglądarki.

loganfsmyth
źródło
15
to jest przydatne. dlaczego nie umieścili tego w dokumentacji? Czy globalna instalacja ustawień Babel jest bezpieczna?
kapital dziecięcy
@kidcapital Dokumentacja zawiera to, ale wydaje się, że jest to tylko dodatkowa uwaga. Spędziłem dużo czasu, próbując dowiedzieć się, jak poprawnie skonfigurować babel 6.0, gdy został wydany po raz pierwszy.
nick
Treść tego postu została dodana jako pole informacyjne na stronie konfiguracji według numeru PR nr 72 . Bardzo niewielka poprawa, ale od czegoś trzeba zacząć! Dzięki Logan.
nick
7
Tyle na temat konwencji zamiast konfiguracji ... więc po wyjęciu z pudełka Babel nic nie robi - po prostu kopiuje pliki?
alex.p
Zadaj nowe pytanie, podając wszystkie informacje o konfiguracji, aby ktoś mógł na nie odpowiedzieć.
loganfsmyth
5

Większość z tych odpowiedzi jest nieaktualna. @babel/preset-envi "@babel/preset-reactczego potrzebujesz (stan na lipiec 2019).

mmla
źródło
3

Miałem ten sam problem z inną przyczyną:

Kod, który próbowałem załadować, nie znajdował się w katalogu pakietu, a Babel domyślnie nie transpiluje poza katalog pakietu.

Rozwiązałem to, przenosząc zaimportowany kod, ale być może mógłbym również użyć instrukcji włączenia w konfiguracji Babel.

w00t
źródło
Czy mógłbyś to rozwinąć? mój kod frontendowy również nie znajduje się „w katalogu pakietu” i działa dobrze. Mój kod serwera zawiera słowo „import”, ale babel-cli nie rozwiązuje tych ...
Philippe
Hmm, nie wiesz, nad czym rozwinąć? Babel się nie transpilował. Spróbuj przejrzeć wszystkie źródła konfiguracji Babel…
w00t
Problem, który próbuję rozwiązać, polega na tym, że moje pliki na serwerze są zorganizowane w kilku folderach: mam server.js, a następnie / api / ... rzeczy ... Kiedy uruchamiam z pamięci, każdy „importuje” lub „wymaga” w tych plikach są rozwiązywane dynamicznie. Kiedy uruchamiam babel z wiersza poleceń, wyprowadzam tylko jeden plik, ale nie rozwiązuję względnego importu, więc nie mogę go użyć do uruchomienia mojego serwera ...
Philippe
3

Najpierw upewnij się, że masz node modules:

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

Następnie dodaj to do pliku konfiguracyjnego pakietu Webpack ( webpack.config.js):

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

Bibliografia:

Powodzenia!

Akash
źródło
2

Od 2020, Jan:

KROK 1: Zainstaluj Babel presets:

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

KROK 2: Utwórz plik: babelrc.jsi dodaj presets:

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

KROK 3: - Zainstaluj babel-loader:

yarn add -D babel-loader

KROK 4: - Dodaj konfigurację programu ładującego do webpack.config.js:

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

Powodzenia...

Akash
źródło
1

Ten sam błąd, inna przyczyna:

Transpiling działał wcześniej, a potem nagle przestał działać, a pliki były po prostu kopiowane bez zmian.

Okazuje się, że .babelrcw pewnym momencie otworzyłem .txtplik i Windows zdecydował się dołączyć do nazwy pliku. Teraz to .babelrc.txtnie zostało rozpoznane przez Babel. Usunięcie .txtsufiksu naprawiło to.

robro
źródło
0

napraw plik .babelrc

{
  "presets": [
    "react",
    "ES2015"
  ]
}
OSP
źródło
0

W roku 2018:

Zainstaluj następujące pakiety, jeśli jeszcze tego nie zrobiłeś:

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!
        }
      }
    ],
  }
Legendy
źródło
0

Najlepsze rozwiązanie

Zmarnowałem na to 3 dni

import react from 'react' unexpected identifier

Próbowałem modyfikowania webpack.config.jsi package.jsonplików oraz dodawanie .babelrc, instalowanie i aktualizowanie poprzez pakiety npm, w których byłem wiele, wiele stron, ale nic nie działało.


Co zadziałało? Dwa słowa: npm start. Zgadza się.

uruchom

npm start 

polecenie w terminalu, aby uruchomić lokalny serwer

...

(pamiętaj, że może to nie zadziałać od razu, ale być może dopiero po wykonaniu jakiejś pracy nad npm, ponieważ przed wypróbowaniem tego usunąłem wszystkie zmiany w tych plikach i zadziałało, więc kiedy naprawdę skończysz, potraktuj to jako ostatnie ośrodek )


Znalazłem te informacje na tej zgrabnej stronie . Jest w języku polskim, ale nie krępuj się używać na nim Tłumacza Google.

Aduku
źródło