El archivo Babel se copia sin transformarse

106

Tengo este codigo:

"use strict";

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

let proxy = httpProxy.createProxyServer({});

y lo he instalado babel-corey babel-cliglobalmente a través de npm. El punto es cuando trato de compilar con esto en mi terminal:

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

El archivo de salida se copia en lugar de compilarse (es decir, es el mismo que el archivo de origen).

¿Que me estoy perdiendo aqui?

Raúl Vallespin
fuente
¿El letcambio a varpero las importdeclaraciones permanecen?
expira el
Para versiones más recientes de react, use los nuevos módulos de babel: stackoverflow.com/a/53927457/6665568 . Tiene mejores mensajes de error y admite nuevas funciones de react.
Natesh bhat

Respuestas:

165

Babel es un marco de transformación. Pre-6.x, habilitó ciertas transformaciones de forma predeterminada, pero con el mayor uso de las versiones de Node que admiten de forma nativa muchas funciones de ES6, se ha vuelto mucho más importante que las cosas sean configurables. De forma predeterminada, Babel 6.x no realiza ninguna transformación. Necesita decirle qué transformaciones ejecutar:

npm install babel-preset-env

y correr

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

o crea un .babelrcarchivo que contenga

{
    "presets": [
        "env"
    ]
}

y ejecútelo como lo hacía antes.

enven este caso es un ajuste preestablecido que básicamente dice que se compile todo el comportamiento estándar de ES * en ES5. Si está utilizando versiones de Node que admiten algunos ES6, es posible que desee considerar hacer

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

para decirle al ajuste preestablecido que solo procese cosas que no son compatibles con su versión de Node. También puede incluir versiones de navegador en sus destinos si necesita compatibilidad con el navegador.

loganfsmyth
fuente
15
esto es útil. ¿Por qué no pusieron esto en la documentación? ¿Es seguro instalar babel-preset globalmente?
Kidcapital
@kidcapital Los documentos incluyen esto, pero solo parece una nota al margen. Pasé mucho tiempo tratando de averiguar cómo configurar babel 6.0 correctamente cuando se lanzó por primera vez.
nick
La esencia de esta publicación se ha agregado como un cuadro de información en la página de Configuración según PR # 72 . Una mejora muy pequeña, ¡pero tienes que empezar por alguna parte! Gracias Logan.
nick
7
Tanto para la convención sobre la configuración ... así que fuera de la caja, Babel no hace nada, ¿solo copia archivos?
alex.p
Haga una nueva pregunta con toda la información sobre su configuración para que alguien pueda responderla.
loganfsmyth
5

La mayoría de estas respuestas son obsoletas. @babel/preset-envy "@babel/preset-reactson lo que necesita (a partir de julio de 2019).

mmla
fuente
3

Tuve el mismo problema con una causa diferente:

El código que estaba intentando cargar no estaba en el directorio del paquete y Babel no transpila por defecto fuera del directorio del paquete.

Lo resolví moviendo el código importado, pero quizás también podría haber usado alguna declaración de inclusión en la configuración de Babel.

w00t
fuente
¿Podría dar más detalles sobre eso? mi código de interfaz tampoco está "bajo el directorio del paquete" y funciona bien. El código de mi servidor contiene "importación" pero babel-cli no resuelve esos ...
Philippe
Hmm, ¿no estás seguro de qué explicar? Babel no se estaba traspasando. Intente buscar en todas sus fuentes de configuración de Babel ...
w00t
el problema que estoy tratando de resolver es que los archivos de mi servidor están organizados en varias carpetas: tengo servers.js, luego / api / ... cosas ... Cuando ejecuto desde la memoria, cada "importa" o "requiere" en esos archivos se resuelven dinámicamente. Cuando ejecuto babel desde la línea de comando, solo genera un solo archivo, pero no resuelve las importaciones relativas, por lo que no puedo usar eso para ejecutar mi servidor ...
Philippe
3

Primero asegúrese de tener lo siguiente node modules:

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

A continuación, agregue esto a su archivo de configuración de 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
      } 
    } 
  ]
}
...

Referencias:

¡Buena suerte!

Akash
fuente
2

A partir de 2020, Jan:

PASO 1: Instale Babel presets:

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

PASO 2: Cree un archivo: babelrc.jsy agregue presets:

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

PASO 3: - Instale babel-loader:

yarn add -D babel-loader

PASO 4: - Agregue la configuración del cargador en su webpack.config.js:

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

Buena suerte...

Akash
fuente
1

Mismo error, causa diferente:

La transpilación había funcionado antes y luego de repente dejó de funcionar, y los archivos simplemente se copiaron como están.

Resulta que abrí el .babelrcen algún momento y Windows decidió agregar .txtel nombre del archivo. Ahora eso .babelrc.txtno fue reconocido por Babel. Eliminar el .txtsufijo solucionó eso.

robro
fuente
0

arregla tu .babelrc

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

En el año 2018:

Instale los siguientes paquetes si aún no lo ha hecho:

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

Solución definitiva

Perdí 3 días en esto

import react from 'react' unexpected identifier

Intenté modificar webpack.config.jsy package.jsonarchivos, y agregar .babelrc, instalar y actualizar paquetes a través de npm, he visitado muchas, muchas páginas, pero nada ha funcionado.


¿Qué funcionó? Dos palabras: npm start. Así es.

ejecutar el

npm start 

comando en la terminal para iniciar un servidor local

...

(tenga en cuenta que puede que no funcione de inmediato, pero tal vez solo después de trabajar un poco en npm porque antes de probar esto, había eliminado todos los cambios en esos archivos y funcionó, así que cuando haya terminado, trátelo como el último resort )


Encontré esa información en esta bonita página . Está en polaco, pero puedes usar el traductor de Google.

Aduku
fuente