O arquivo Babel é copiado sem ser transformado

106

Eu tenho este código:

"use strict";

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

let proxy = httpProxy.createProxyServer({});

e eu tenho instalado babel-coree babel-cliglobalmente através npm. O ponto é quando tento compilar com isso no meu terminal:

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

O arquivo de saída é copiado em vez de compilado (quer dizer, é o mesmo que o arquivo de origem).

O que estou perdendo aqui?

Raul Vallespin
fonte
a letmudança para, varmas as importdeclarações permanecem?
expira em
Para versões mais recentes do react, use os novos módulos babel: stackoverflow.com/a/53927457/6665568 . Ele tem melhores mensagens de erro e suporta novos recursos de react.
Natesh bhat

Respostas:

165

Babel é uma estrutura de transformação. Antes do 6.x, ele habilitava certas transformações por padrão, mas com o aumento do uso de versões do Node que suportam nativamente muitos recursos ES6, tornou-se muito mais importante que as coisas sejam configuráveis. Por padrão, o Babel 6.x não executa nenhuma transformação. Você precisa dizer a ele quais transformações executar:

npm install babel-preset-env

e corra

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

ou crie um .babelrcarquivo contendo

{
    "presets": [
        "env"
    ]
}

e execute-o como antes.

envneste caso, é uma predefinição que basicamente diz para compilar todo o comportamento padrão do ES * para o ES5. Se você estiver usando versões do Node que suportam algum ES6, você pode querer considerar fazer

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

para dizer à predefinição para processar apenas coisas que não são suportadas por sua versão do Node. Você também pode incluir versões de navegador em seus destinos se precisar de suporte de navegador.

loganfsmyth
fonte
15
isso é útil. por que eles não colocaram isso na documentação? é seguro instalar o babel-preset globalmente?
Kidcapital
@kidcapital Os documentos incluem isso, mas apenas como uma observação lateral, ao que parece. Passei muito tempo tentando descobrir como configurar o babel 6.0 corretamente de volta quando foi lançado pela primeira vez.
nick
A essência desta postagem foi adicionada como uma caixa de informações na página de configuração de acordo com PR # 72 . Uma pequena melhoria, mas você precisa começar de algum lugar! Obrigado Logan.
apelido de
7
Tanto para convenção sobre configuração ... então fora da caixa Babel não faz nada - apenas copia arquivos?
alex.p
Faça uma nova pergunta com todas as informações sobre sua configuração para que alguém possa respondê-la.
loganfsmyth
5

Muitas dessas respostas são obsoletas. @babel/preset-enve "@babel/preset-reactsão o que você precisa (a partir de julho de 2019).

mmla
fonte
3

Eu tive o mesmo problema com uma causa diferente:

O código que eu estava tentando carregar não estava no diretório do pacote, e o Babel não faz a transpilação por padrão fora do diretório do pacote.

Resolvi movendo o código importado, mas talvez também pudesse ter usado alguma instrução de inclusão na configuração do Babel.

w00t
fonte
Você poderia elaborar sobre isso? meu código de front-end não está "sob o diretório do pacote" e funciona bem. Meu código de servidor contém "import", mas o babel-cli não está resolvendo aqueles ...
Philippe
Hmm, não tem certeza sobre o que elaborar? Babel não estava transpilando. Tente olhar todas as suas fontes de configuração do Babel ...
w00t
o problema que estou tentando resolver é que os arquivos do meu servidor estão organizados em várias pastas: Tenho o servers.js, então / api / ... coisas ... Quando executo da memória, cada "importa" ou "requer" nesses arquivos estão sendo resolvidos dinamicamente. Quando executo o babel a partir da linha de comando, só produzo um único arquivo, mas não resolvo as importações relativas, então não posso usar isso para executar meu servidor ...
Philippe
3

Primeiro, certifique-se de ter o seguinte node modules:

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

Em seguida, adicione ao arquivo de configuração do 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
      } 
    } 
  ]
}
...

Referências:

Boa sorte!

Akash
fonte
2

A partir de 2020, Jan:

PASSO 1: Instale o Babel presets:

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

ETAPA 2: Crie um arquivo: babelrc.jse adicione presets:

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

PASSO 3: - Instale o babel-loader:

yarn add -D babel-loader

PASSO 4: - Adicione a configuração do carregador em seu webpack.config.js:

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

Boa sorte...

Akash
fonte
1

Mesmo erro, causa diferente:

A transpilação já havia funcionado antes e de repente parou de funcionar, com os arquivos simplesmente sendo copiados como estão.

Acontece que eu abri o .babelrcem algum ponto e o Windows decidiu anexar .txtao nome do arquivo. Agora, isso .babelrc.txtnão foi reconhecido por babel. Remover o .txtsufixo corrigiu isso.

Robro
fonte
0

conserte seu .babelrc

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

No ano de 2018:

Instale os seguintes pacotes, se ainda não o fez:

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

Solução final

Eu perdi 3 dias nisso

import react from 'react' unexpected identifier

Eu tentei modificar webpack.config.jse package.jsonarquivos, e adicionando .babelrc, instalar e atualizar pacotes via npm, que eu visitei muitas, muitas páginas, mas nada funcionou.


O que funcionou? Duas palavras: npm start. Está certo.

execute o

npm start 

comando no terminal para lançar um servidor local

...

(lembre-se de que pode não funcionar de imediato, mas talvez só depois de fazer algum trabalho no npm, porque antes de tentar fazer isso eu havia excluído todas as alterações nesses arquivos e funcionou, então, depois de realmente terminar, trate-o como o último resort )


Eu encontrei essa informação nesta página legal . Está em polonês, mas sinta-se à vontade para usar o Google Translate nele.

Aduku
fonte