Babel dosyası dönüştürülmeden kopyalanır


106

Bu koda sahibim:

"use strict";

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

let proxy = httpProxy.createProxyServer({});

ve ben yüklemiş babel-coreve babel-cliküresel NPM yoluyla. Önemli olan, bununla terminalimde derlemeye çalıştığım zamandır:

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

Çıktı dosyası derlenmek yerine kopyalanır (yani, kaynak dosya ile aynıdır).

Burada neyi özlüyorum?


does letdeğişikliği varancak importifadeleri kalır?
runspired

React'in daha yeni sürümleri için yeni babel modüllerini kullanın: stackoverflow.com/a/53927457/6665568 . Daha iyi hata mesajlarına sahiptir ve yeni tepki özelliklerini destekler.
Natesh bhat

Yanıtlar:


165

Babel bir dönüşüm çerçevesidir. 6.x öncesi, varsayılan olarak belirli dönüşümleri etkinleştirdi, ancak birçok ES6 özelliğini yerel olarak destekleyen Node sürümlerinin artan kullanımı ile, şeylerin yapılandırılabilir olması çok daha önemli hale geldi. Varsayılan olarak, Babel 6.x herhangi bir dönüştürme gerçekleştirmez. Hangi dönüşümlerin çalıştırılacağını ona söylemelisiniz:

npm install babel-preset-env

ve koş

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

veya .babelrciçeren bir dosya oluşturun

{
    "presets": [
        "env"
    ]
}

ve daha önceki gibi çalıştır.

envbu durumda, temel olarak tüm standart ES * davranışını ES5'e derlemeyi söyleyen bir ön ayardır. Bazı ES6'yı destekleyen Düğüm sürümleri kullanıyorsanız, yapmayı düşünebilirsiniz.

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

ön ayara yalnızca Düğüm sürümünüz tarafından desteklenmeyen şeyleri işlemesini söylemek için. Tarayıcı desteğine ihtiyacınız varsa, hedeflerinize tarayıcı sürümlerini de dahil edebilirsiniz.


15
bu kullanışlı. neden bunu belgelere koymadılar? dünya çapında babel-preset kurmak güvenli midir?
kidcapital

@kidcapital Dokümanlar bunu içeriyor, ancak yalnızca bir yan not olarak görünüyor. Babel 6.0'ı ilk piyasaya sürüldüğünde nasıl düzgün bir şekilde yapılandırılacağını bulmaya çalışmak için çok zaman harcadım.
nick

Bu gönderinin özü, PR # 72'ye göre Kurulum sayfasında bir bilgi kutusu olarak eklenmiştir . Çok küçük bir gelişme, ama bir yerden başlamalısın! Teşekkürler Logan.
nick

7
Konfigürasyon yerine konvansiyon için çok fazla ... yani Babel kutunun dışında hiçbir şey yapmıyor - sadece dosyaları mı kopyalıyor?
alex.p

Birinin yanıtlayabilmesi için lütfen kurulumunuzla ilgili tüm bilgileri içeren yeni bir soru sorun.
loganfsmyth

5

Bu cevapların çoğu geçerliliğini yitirmiştir. @babel/preset-envve "@babel/preset-reactihtiyacınız olan şey (Temmuz 2019 itibariyle).


3

Aynı sorunu farklı bir nedenle yaşadım:

Yüklemeye çalıştığım kod paket dizini altında değildi ve Babel varsayılan olarak paket dizininin dışına aktarım yapmıyor.

İçeri aktarılan kodu hareket ettirerek çözdüm, ancak belki de Babel yapılandırmasında bazı dahil etme ifadeleri de kullanabilirdim.


Bunu biraz detaylandırır mısın? ön uç kodum da "paket dizininin altında" değil ve iyi çalışıyor. Sunucu kodum "içe aktarma" içeriyor ancak babel-cli bunları
Philippe

Hmm, neyi detaylandıracağından emin değil misin? Babel aktarılmıyordu. Tüm Babel yapılandırması kaynaklarınıza bakmayı deneyin…
w00t

Çözmeye çalıştığım sorun, sunucu dosyalarımın birkaç klasörde düzenlenmiş olması: server.js, ardından / api / ... stuff ... Bellekten çalıştırdığımda, her biri "içe aktar" veya "gerekli" bu dosyalarda dinamik olarak çözümleniyor. Babel'i komut satırından çalıştırdığımda, yalnızca tek bir dosya çıktısı alıyorum, ancak ilgili içe aktarmaları çözmüyorum, bu yüzden sunucumu çalıştırmak için kullanamıyorum ...
Philippe

3

Öncelikle aşağıdakilere sahip olduğunuzdan emin olun node modules:

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

Sonra, bunu Webpack yapılandırma dosyanıza ekleyin ( webpack.config.js):

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

Referanslar:

İyi şanslar!


2

İtibariyle 2020, Jan:

ADIM 1: Şunları kurun Babel presets:

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

ADIM 2: Bir dosya oluşturun: babelrc.jsve şunları ekleyin presets:

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

ADIM 3: - Şunları kurun babel-loader:

yarn add -D babel-loader

ADIM 4: - Yükleyici yapılandırmasını aşağıdakilere ekleyin webpack.config.js:

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

İyi şanslar...



1

Aynı hata, farklı neden:

Transpiling daha önce işe yaradı ve sonra aniden çalışmayı bıraktı, dosyalar sadece olduğu gibi kopyalandı.

.babelrcBir noktada açtım ve Windows .txtdosya adına eklemeye karar verdi . Şimdi bu .babelrc.txtBabel tarafından tanınmadı. .txtSoneki kaldırmak bunu düzeltti.


0

.babelrc'nizi düzeltin

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

0

2018 yılında:

Henüz yüklemediyseniz aşağıdaki paketleri kurun:

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!
        }
      }
    ],
  }

0

Nihai çözüm

Bunun için 3 günümü boşa harcadım

import react from 'react' unexpected identifier

Değiştirmeyi webpack.config.jsve package.jsondosyaları dosyalamayı ve .babelrcpaket eklemeyi , yüklemeyi ve güncellemeyi npmdenedim, birçok sayfayı ziyaret ettim ama hiçbir şey işe yaramadı.


Ne işe yaradı? İki kelime: npm start. Doğru.

koş

npm start 

terminalde yerel bir sunucu başlatmak için komut

...

(Hemen işe yaramayabileceğini unutmayın, ancak belki de sadece npm üzerinde biraz çalıştıktan sonra çünkü bunu denemeden önce bu dosyalardaki tüm değişiklikleri sildim ve işe yaradı, bu yüzden gerçekten işiniz bittikten sonra bunu sonunuz olarak kabul edin çare )


Bu bilgiyi bu temiz sayfada buldum . Lehçe ama Google çeviri kullanmaktan çekinmeyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.