I file preimpostati non possono esportare oggetti


87

Ho un file carousel in cui voglio ottenere index.jse costruire block.build.js, quindi il mio 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;

Quello package.jsonche uso è di seguito:

{
  "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"
}

... ma ricevo questo messaggio di errore:

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

Qualcuno sa come risolvere questo problema?


Risposte:


83

Stai utilizzando una combinazione di Babel 6 e Babel 7. Non c'è garanzia di compatibilità tra le versioni:

"@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",

dovrebbe essere

"@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']
    }

sarebbe

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

Sono anche confuso perché non hai menzionato @babel/proposal-class-propertiesnel tuo package.json, ma supponendo che sia lì dovrebbe anche essere aggiornato.


1
Vorrei evidenziare che babel-loader8 dovrebbe essere usato con quegli altri moduli v7 e l'utilizzo npm install --save-dev babel-loader@^7mi ha dato altri errori
YakovL

come fornire quindi pacchetti che appartengono solo a babel 6 o 7? Ho esaminato tutte le soluzioni e poi mi ha chiesto @ babel / core o babel-core. Il pacchetto può essere modificato manualmente?
Carmine Tambascia

come assicurarsi quindi un pacchetto che appartiene solo a babel 6 o 7? Ho esaminato tutte le soluzioni e poi mi ha chiesto @ babel / core o babel-core. Credo che abbia a che fare con i moduli dei nodi che fanno ancora riferimento in qualche modo a babele sbagliate per un problema di cache. Ho provato anche a cambiarle manualmente senza fortuna
Carmine Tambascia

Questa situazione si verifica ancora. Finora questo strumento github.com/babel/babel-upgrade sembra un modo in cui vengono presentate più dipendenze per l'aggiornamento
Carmine Tambascia

Ho ancora problemi con questo errore, qualcuno può aiutarmi? Sto cercando di eseguire la mia app React (utilizza webpack) su un server Express. Ecco il mio repository github ( github.com/smthmelv/my-react-app/tree/addExpressJS ), qualsiasi aiuto sarebbe molto apprezzato.
Darneezie

42

A me è successo e una soluzione semplice per me è stata disinstallare babel-loader@8^e @babel/core:

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

... e poi per installare la versione 7 babel-loader:

npm install --save-dev babel-loader@^7

1
Ha funzionato davvero, grazie mille per queste informazioni. Stavo anche usando babel / core versione 7 e babel-loader versione 8. Quindi ho appena disinstallato la versione 8 e installato la versione 7 con il comandonpm install --save-dev babel-loader@^7
harbrinder_singh

1
Questo ha risolto il problema per me, anche se non ho installato nessun altro framework js.
Nathaniel Flick

1
Fondamentalmente sto sprecando un pomeriggio perché così tanti pacchetti cambiano da poche settimane fa quando ho configurato correttamente il webpack 2. C'è un modo per tenere traccia dei pacchetti stabili? Questo non è affatto produttivo. Vorrei sviluppare il componente
React

1
Questo funziona per me anche se ho ricevuto un altro errore che è la compilazione del modulo non riuscita (da ./node_modules/babel-loader/lib/index.js): quindi non vedo l'ora di risolverlo
Francis Tito,

1
Incredibile come continuo ad avere questo problema dal momento che molti progetti open source sono piuttosto obsoleti ma si riferiscono a babel 6 o un mix con babel 7
Carmine Tambascia

11

Anche dalla babel-loaderv8, sono leggermente cambiate:

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

(stessa cosa per @babel/preset-reactinvece di babel-preset-react).


8

Ho lo stesso problema nel mio progetto webpack / react: sembra che ci sia stato un problema con il .babelrcfile.

L'ho aggiornato come mostrato di seguito e ha funzionato:

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

3

questo ha funzionato per me:

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

e in babelrc:

"presets" : ["es2015", "react"]    

Questo non è completo per risolvere questo problema almeno per ricordarsi di installare il pacchetto bridge che evita che qualche dipendenza nascosta stia ancora "richiedendo" la versione precedente, ho risolto questo errore dopo più di 1 ora grazie a questa installazione di npm - salva -dev "babel-core@^7.0.0-bridge.0" da qui github.com/babel/babel/issues/8482
Carmine Tambascia

3

Questa soluzione ha funzionato per me:

npm install babel-loader babel-preset-react

poi in .babelrc

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

quindi esegui npm run start, webpack genererà la distdirectory.


3

Sono disponibili aggiornamenti in babel 7 dalla versione 6, fare riferimento a https://babeljs.io/docs/en/v7-migration . Per risolvere il problema / errore corrente

Installare

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

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

quindi in .babelrc la dipendenza per i preset dovrebbe apparire come

{

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

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

}

1

Avevo "stage-1" nei miei preset in .babelrc, quindi l'ho rimosso e l'errore è scomparso


0

Sostituisci il tuo file .babelrc seguendo il codice per risolvere il mio problema

{
  "presets": ["module:metro-react-native-babel-preset"]
}

0

Ciò è dovuto all'utilizzo di pacchetti babel obsoleti . Il progetto babel, proprio come la maggior parte degli altri progetti Javascript attivi, è passato all'utilizzo dei pacchetti di ambito. Quindi, i nomi dei pacchetti iniziano con@babel

Se stai usando il filo, segui quello sotto:

Passaggio 1: rimuovere i vecchi pacchetti

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

passaggio 2: aggiungere i nuovi pacchetti

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

Se stai usando npm, segui il seguente:

passaggio 1: rimuovere i vecchi pacchetti

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

passaggio 2: aggiungere i nuovi pacchetti

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

Passaggio 3: comune sia a npm che a filato

Dopo aver installato i pacchetti più recenti, ricordati di aggiornare i tuoi .babelrcpreset da reacta @babel/preset-react. Qui c'è un semplice esempio

{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
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.