Il file Babel viene copiato senza essere trasformato


106

Ho questo codice:

"use strict";

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

let proxy = httpProxy.createProxyServer({});

e ho installato babel-coree babel-cliglobalmente tramite npm. Il punto è quando provo a compilare con questo sul mio terminale:

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

Il file di output viene copiato anziché compilato (voglio dire, è lo stesso del file sorgente).

Cosa mi manca qui?


fa il letcambiamento var, ma le importdichiarazioni rimangono?
runspired il

Per le versioni più recenti di React, usa i nuovi moduli babel: stackoverflow.com/a/53927457/6665568 . Ha messaggi di errore migliori e supporta nuove funzionalità di React.
Natesh bhat

Risposte:


165

Babel è un quadro di trasformazione. Prima della 6.x, abilitava alcune trasformazioni per impostazione predefinita, ma con l'aumento dell'utilizzo delle versioni di Node che supportano nativamente molte funzionalità ES6, è diventato molto più importante che le cose siano configurabili. Per impostazione predefinita, Babel 6.x non esegue alcuna trasformazione. Devi dirgli quali trasformazioni eseguire:

npm install babel-preset-env

e corri

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

o creare un .babelrcfile contenente

{
    "presets": [
        "env"
    ]
}

ed eseguilo proprio come eri prima.

envin questo caso è un preset che fondamentalmente dice di compilare tutto il comportamento ES * standard su ES5. Se stai usando versioni di Node che supportano alcuni ES6, potresti prendere in considerazione l'idea di farlo

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

per dire al preset di elaborare solo cose che non sono supportate dalla tua versione di Node. Puoi anche includere le versioni del browser nelle destinazioni se hai bisogno del supporto del browser.


15
questo è utile. perché non l'hanno messo nella documentazione? è sicuro installare babel-preset a livello globale?
kidcapital

@kidcapital La documentazione include questo, ma sembra solo come nota a margine. Ho passato molto tempo a cercare di capire come riconfigurare babel 6.0 correttamente quando è stato rilasciato per la prima volta.
nick

L'essenza di questo post è stata aggiunta come riquadro informativo nella pagina di configurazione per PR # 72 . Un miglioramento molto minore, ma devi iniziare da qualche parte! Grazie Logan.
nick

7
Questo per quanto riguarda la convenzione sulla configurazione ... quindi, per impostazione predefinita, Babel non fa nulla: copia solo i file?
alex.p

Poni una nuova domanda con tutte le informazioni sulla configurazione in modo che qualcuno possa rispondere.
loganfsmyth

5

La maggior parte di queste risposte sono obsolete. @babel/preset-enve "@babel/preset-reactsono ciò di cui hai bisogno (a partire da luglio 2019).


3

Ho avuto lo stesso problema con una causa diversa:

Il codice che stavo cercando di caricare non si trovava nella directory del pacchetto e Babel non esegue il transpiling al di fuori della directory del pacchetto.

L'ho risolto spostando il codice importato, ma forse avrei potuto usare anche qualche dichiarazione di inclusione nella configurazione di Babel.


Potresti approfondire questo? il mio codice frontend non è nemmeno "nella directory del pacchetto" e funziona bene. Il codice del mio server contiene "import" ma babel-cli non risolve quelli ...
Philippe

Hmm, non sei sicuro di cosa approfondire? Babel non stava traspellendo. Prova a guardare tutte le tue fonti di configurazione Babel ...
w00t

il problema che sto cercando di risolvere è che i file del mio server sono organizzati in diverse cartelle: ho servers.js, quindi / api / ... stuff ... Quando eseguo dalla memoria, ogni "import" o "require" in quei file vengono risolti dinamicamente. Quando eseguo babel dalla riga di comando, eseguo solo un singolo file, ma non risolve le relative importazioni, quindi non posso usarlo per eseguire il mio server ...
Philippe

3

Innanzitutto assicurati di avere quanto segue node modules:

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

Successivamente, aggiungilo al tuo file di configurazione 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
      } 
    } 
  ]
}
...

Riferimenti:

In bocca al lupo!


2

A partire da 2020, Jan:

PASSAGGIO 1: Installa Babel presets:

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

PASSAGGIO 2: creare un file: babelrc.jse aggiungere presets:

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

FASE 3: - Installa babel-loader:

yarn add -D babel-loader

FASE 4: - Aggiungi la configurazione del caricatore nel tuo webpack.config.js:

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

In bocca al lupo...



1

Stesso errore, causa diversa:

Il transpiling aveva funzionato prima e poi improvvisamente ha smesso di funzionare, con i file che venivano semplicemente copiati così come sono.

.babelrcA un certo punto ho aperto il e Windows ha deciso di aggiungerlo .txtal nome del file. Questo .babelrc.txtnon è stato riconosciuto da Babel. La rimozione del .txtsuffisso ha risolto il problema.


0

correggi il tuo .babelrc

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

0

Nell'anno 2018:

Installa i seguenti pacchetti se non l'hai ancora fatto:

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

Soluzione definitiva

Ho sprecato 3 giorni su questo

import react from 'react' unexpected identifier

Ho provato a modificare webpack.config.jse package.jsonfile e ad aggiungere .babelrc, installare e aggiornare pacchetti tramite npm, ho visitato molte, molte pagine ma niente ha funzionato.


Cosa ha funzionato? Due parole: inizio npm. Giusto.

corri il

npm start 

comando nel terminale per avviare un server locale

...

( tieni presente che potrebbe non funzionare subito ma forse solo dopo aver lavorato su npm perché prima di provarlo avevo cancellato tutte le modifiche in quei file e ha funzionato, quindi dopo aver finito davvero, trattalo come l'ultimo località )


Ho trovato queste informazioni in questa bella pagina . È in polacco ma sentiti libero di usare Google Translate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.