Arquivos predefinidos não têm permissão para exportar objetos

86

Eu tenho um arquivo de carrossel que desejo obter index.jse construir block.build.js, então meu webpack.config.jsé:

var config = {
  entry: './index.js',
  output: {
    path: __dirname,
    filename: 'block.build.js',
  },
  devServer: {
    contentBase: './Carousel'
  },
  module : {
    rules : [
      {
        test: /.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
        query: {
          presets: ['react', 'es2015'],
          plugins: ['transform-class-properties']
        }
      }
    ]
  }
};
module.exports = config;

O package.jsonque eu uso está abaixo:

{
  "name": "carousel",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "dependencies": {
    "@babel/core": "^7.0.0-beta.40",
    "babel-cli": "^6.26.0",
    "babel-loader": "^8.0.0-beta.0",
    "babel-plugin-lodash": "^3.3.2",
    "babel-plugin-react-transform": "^3.0.0",
    "babel-preset-react": "^6.24.1",
    "cross-env": "^5.1.3",
    "lodash": "^4.17.5",
    "react": "^16.2.0",
    "react-dom": "^16.2.0",
    "react-swipeable": "^4.2.0",
    "styled-components": "^3.2.1"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "watch": "webpack --watch",
    "start": "webpack-dev-server --open",
    "build": "webpack"
  },
  "devDependencies": {
    "webpack": "^4.1.1",
    "webpack-cli": "^2.0.10",
    "webpack-dev-server": "^3.1.0"
  },
  "author": "brad traversy",
  "license": "ISC"
}

... mas recebo esta mensagem de erro:

ERROR in ./index.js
Module build failed: Error: Plugin/Preset files are not allowed to export objects, only functions.

Alguém sabe como resolver isso?

Sonia Maklouf
fonte
valentinog.com/blog/babel me ajudou.
Ryan

Respostas:

83

Você está usando uma combinação de Babel 6 e Babel 7. Não há garantia de compatibilidade entre as versões:

"@babel/core": "^7.0.0-beta.40",
"babel-cli": "^6.26.0",
"babel-loader": "^8.0.0-beta.0",
"babel-plugin-lodash": "^3.3.2",
"babel-plugin-react-transform": "^3.0.0",
"babel-preset-react": "^6.24.1",

deveria estar

"@babel/core": "^7.0.0-beta.40",
"@babel/cli": "^7.0.0-beta.40",
"babel-loader": "^8.0.0-beta.0",
"babel-plugin-lodash": "^3.3.2",
"babel-plugin-react-transform": "^3.0.0",
"@babel/preset-react": "^7.0.0-beta.40",

e

    query: {
      presets: ['react', 'es2015'],
      plugins: ['transform-class-properties']
    }

seria

    query: {
      presets: ['@babel/react', '@babel/es2015'],
      plugins: ['@babel/proposal-class-properties']
    }

Também estou confuso porque você não mencionou @babel/proposal-class-propertiesno seu package.json, mas presumindo que esteja lá, também deve ser atualizado.

loganfsmyth
fonte
1
Eu destacaria que babel-loader8 deve ser usado com os outros módulos v7 e o uso npm install --save-dev babel-loader@^7me deu outros erros
YakovL
como então fornecer pacotes que pertencem apenas a babel 6 ou 7? Eu passei por todas as soluções e então me perguntaram @ babel / core ou babel-core. O pacote pode ser alterado manualmente?
Carmine Tambascia
como então ter certeza de um pacote que pertence apenas a babel 6 ou 7? Eu passei por todas as soluções e então me perguntaram @ babel / core ou babel-core. Eu acredito que tem a ver com módulos de nó ainda referenciando de alguma forma o babel errado para um problema de cache. Eu também tentei alterá-los manualmente sem sorte
Carmine Tambascia
Essa situação ainda acontece. Até agora, esta ferramenta github.com/babel/babel-upgrade parece uma forma quando mais dependências para atualização são apresentadas
Carmine Tambascia
Ainda estou tendo problemas com esse erro, alguém pode me ajudar? Estou tentando executar meu aplicativo react (usa webpack) em um servidor expresso. Aqui está meu repositório github ( github.com/smthmelv/my-react-app/tree/addExpressJS ), qualquer ajuda seria muito apreciada.
Darneezie
42

Aconteceu comigo e uma solução simples para mim foi desinstalar babel-loader@8^e @babel/core:

npm uninstall --save babel-loader
npm uninstall --save @babel/core

… E depois para instalar a versão 7 do babel-loader:

npm install --save-dev babel-loader@^7
Kevin Youn
fonte
1
Realmente funcionou, muito obrigado por esta informação. Eu também estava usando o babel / core versão 7 e o babel-loader versão 8. Então, desinstalei a versão 8 e npm install --save-dev babel-loader@^7
instalei a
1
Isso corrigiu para mim, embora eu não tenha nenhum outro framework js instalado.
Nathaniel Flick
1
Basicamente, estou perdendo uma tarde porque muitos pacotes mudaram desde apenas algumas semanas atrás, quando eu configurei corretamente o webpack 2. Existe uma maneira de manter o controle de pacotes estáveis? Isso não é nada produtivo. Gostaria de desenvolver o componente de reação para não instalar e desinstalar pacotes do babel
Carmine Tambascia
1
Isso funciona para mim, embora eu tenha recebido outro erro que é a falha na construção do módulo (de ./node_modules/babel-loader/lib/index.js): então, estou ansioso para resolvê-lo
Francis Tito
1
Incrível como eu continuo tendo esse problema, já que muitos projetos de código aberto estão bastante desatualizados, mas me refiro a babel 6 ou uma mistura com babel 7
Carmine Tambascia
11

Também a partir da babel-loaderv8, eles mudaram um pouco:

webpack 4.x | babel-loader 8.x | babel 7.x

npm install -D babel-loader @babel/core @babel/preset-env webpack

webpack 4.x | babel-loader 7.x | babel 6.x

npm install -D babel-loader@7 babel-core babel-preset-env webpack

(mesma coisa para em @babel/preset-reactvez de babel-preset-react).

Thomas Decaux
fonte
8

Tenho o mesmo problema no meu projeto webpack / react - parece que houve um problema com o .babelrcarquivo.

Eu o atualizei conforme visto abaixo e ele funcionou:

{
    "presets": [
        "@babel/preset-env",
        "@babel/preset-react"
    ],
    "plugins": [
        "transform-class-properties",
        "transform-object-rest-spread"
    ]
}
Rawan-25
fonte
3

isso funcionou para mim:

npm uninstall --save babel-loader
npm uninstall --save @babel/core
npm install --save-dev babel-loader@^7

e em babelrc:

"presets" : ["es2015", "react"]    
Anilal
fonte
Isso não está completo para resolver esse problema pelo menos lembrar de instalar o pacote de bridge que evita que alguma dependência oculta ainda esteja "exigindo" a versão anterior, resolvi esse erro depois de mais de 1 hora graças a esta instalação npm --save -dev "babel-core@^7.0.0-bridge.0" a partir daqui github.com/babel/babel/issues/8482
Carmine Tambascia
3

Esta solução funcionou para mim:

npm install babel-loader babel-preset-react

então em .babelrc

{
  "presets": [
    "@babel/preset-env", "@babel/preset-react"
  ]
}

em seguida npm run start, execute o webpack para gerar o distdiretório.

Ramy M. Mousa
fonte
3

Existem atualizações no babel 7 da versão 6, consulte https://babeljs.io/docs/en/v7-migration . Para resolver o problema / erro atual

Instalar

npm install --save-dev @babel/preset-react

npm install --save-dev @babel/preset-env

então em .babelrc a dependência para predefinições deve ser semelhante

{

"presets":["@babel/preset-env", "@babel/preset-react"],

   "plugins": [
    "react-hot-loader/babel", "transform-object-rest-spread"]

}
Jonatan
fonte
1

Eu tinha "estágio 1" dentro de minhas predefinições em .babelrc, então removi isso e o erro foi embora

Sam
fonte
0

Substitua seu arquivo .babelrc seguindo o código que corrige meu problema

{
  "presets": ["module:metro-react-native-babel-preset"]
}
Rajesh Nasit
fonte
0

Isso é devido ao uso de pacotes babel desatualizados . O projeto babel, assim como a maioria dos outros projetos Javascript ativos, passou a usar pacotes de escopo. Portanto, os nomes dos pacotes começam com@babel

Se você estiver usando fio, siga o seguinte:

Etapa 1: remova os pacotes antigos

$ yarn remove babel-core babel-loader babel-preset-env babel-preset-react

etapa 2: adicionar os novos pacotes

$ yarn add -D @babel/core babel-loader @babel/preset-env @babel/preset-react

Se você estiver usando o npm, siga o seguinte:

etapa 1: Remova os pacotes antigos

$ npm uninstall babel-core babel-loader babel-preset-env babel-preset-react

etapa 2: adicionar os novos pacotes

$ npm add -D @babel/core babel-loader @babel/preset-env @babel/preset-react

Etapa 3: comum a npm ou fio

Depois de instalar os pacotes mais novos, lembre-se de atualizar suas .babelrcpredefinições de reactpara @babel/preset-react. Aqui está um exemplo simples

{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
Anand Raja
fonte