Wstępnie ustawione pliki nie mogą eksportować obiektów

87

Mam plik karuzeli, w którym chcę pobrać index.jsi zbudować block.build.js, więc moje webpack.config.jsjest:

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;

To, package.jsonktórego używam, jest poniżej:

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

… Ale pojawia się ten komunikat o błędzie:

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

Czy ktoś wie, jak to rozwiązać?

sonia maklouf
źródło
valentinog.com/blog/babel mi pomogło.
Ryan

Odpowiedzi:

83

Używasz kombinacji Babel 6 i Babel 7. Nie ma gwarancji zgodności między wersjami:

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

Powinien być

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

i

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

byłoby

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

Jestem też zdezorientowany, ponieważ nie wspomniałeś o tym @babel/proposal-class-propertiesw swoim package.json, ale zakładając, że tam jest, należy go również zaktualizować.

loganfsmyth
źródło
1
Podkreśliłbym, że babel-loader8 powinno być używane z tymi innymi modułami v7 i użycie npm install --save-dev babel-loader@^7dało mi inne błędy
JakowL
jak więc zapewnić pakiety, które należą tylko do babel 6 lub 7? Przeszedłem przez wszystkie rozwiązania i albo wtedy, gdy zapytałem mnie @ babel / core lub babel-core. Czy pakiet można zmienić ręcznie?
Carmine Tambascia
jak więc upewnić się, że pakiet należy tylko do babel 6 lub 7? Przeszedłem przez wszystkie rozwiązania i albo wtedy, gdy zapytałem mnie @ babel / core lub babel-core. Uważam, że ma to związek z modułami węzłów, które wciąż w jakiś sposób odwołują się do niewłaściwego babel z powodu problemu z pamięcią podręczną. Próbowałem też zmienić je ręcznie bez powodzenia
Carmine Tambascia
Taka sytuacja nadal się dzieje. Jak dotąd to narzędzie github.com/babel/babel-upgrade wydaje się sposobem, w którym pojawia się więcej zależności do aktualizacji
Carmine Tambascia
Nadal mam problemy z tym błędem. Czy ktoś może mi pomóc? Próbuję uruchomić moją aplikację React (używa webpacka) na serwerze ekspresowym. Oto moje repozytorium github ( github.com/smthmelv/my-react-app/tree/addExpressJS ), każda pomoc byłaby bardzo mile widziana .
Darneezie
42

Zdarzyło mi się to i prostym rozwiązaniem dla mnie było odinstalowanie babel-loader@8^i @babel/core:

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

… A następnie zainstalować program ładujący babel w wersji 7:

npm install --save-dev babel-loader@^7
Kevin Youn
źródło
1
Naprawdę zadziałało, wielkie dzięki za tę informację. npm install --save-dev babel-loader@^7
Używałem
1
To naprawiło to dla mnie, chociaż nie mam zainstalowanego żadnego innego frameworka js.
Nathaniel Flick
1
W zasadzie marnuję popołudnie, ponieważ tak wiele pakietów zmienia się od kilku tygodni, kiedy po raz pierwszy poprawnie skonfigurowałem webpack 2. Czy istnieje sposób na śledzenie stabilnych pakietów? Chciałbym rozwijać nie reagują komponent utrzymanie instalacji i unistall pakiety Babel
Carmine Tambascia
1
To działa dla mnie, chociaż mam inny błąd, którym jest niepowodzenie kompilacji modułu (z ./node_modules/babel-loader/lib/index.js): więc nie mogę się doczekać, aby go rozwiązać
Francis Tito
1
Niesamowite, ponieważ wciąż mam ten problem, ponieważ wiele projektów open source jest dość przestarzałych, ale odnoszą się do babel 6 lub mieszanki z babel 7
Carmine Tambascia
11

Również od babel-loaderwersji 8 trochę się zmieniły:

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

(to samo dla @babel/preset-reactzamiast babel-preset-react).

Thomas Decaux
źródło
8

Mam ten sam problem w moim projekcie Webpack / React - wygląda na to, że wystąpił problem z .babelrcplikiem.

Zaktualizowałem to, jak widać poniżej, i załatwiło sprawę:

{
    "presets": [
        "@babel/preset-env",
        "@babel/preset-react"
    ],
    "plugins": [
        "transform-class-properties",
        "transform-object-rest-spread"
    ]
}
Rawan-25
źródło
3

to zadziałało dla mnie:

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

aw babelrc:

"presets" : ["es2015", "react"]    
Anilal
źródło
Nie jest to kompletne, aby rozwiązać ten problem przynajmniej pamiętać o zainstalowaniu pakietu mostka, który pozwala uniknąć tego, że jakaś zależność hiddend nadal "wymaga" poprzedniej wersji, rozwiązałem ten błąd po ponad 1 godzinie dzięki tej instalacji npm --zapisz -dev "babel-core@^7.0.0-bridge.0" stąd github.com/babel/babel/issues/8482
Carmine Tambascia
3

To rozwiązanie zadziałało dla mnie:

npm install babel-loader babel-preset-react

potem w .babelrc

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

następnie uruchom npm run start, webpack wygeneruje distkatalog.

Ramy M. Mousa
źródło
3

Istnieją aktualizacje w babel 7 z wersji 6, patrz https://babeljs.io/docs/en/v7-migration . Aby rozwiązać bieżący problem / błąd

zainstalować

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

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

wtedy w .babelrc powinna wyglądać zależność dla presetów

{

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

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

}
Jonatan
źródło
1

Miałem "stage-1" w moich presetach w .babelrc, więc usunąłem to i błąd zniknął

Sam
źródło
0

Zastąp plik .babelrc zgodnie z kodem, aby rozwiązać mój problem

{
  "presets": ["module:metro-react-native-babel-preset"]
}
Rajesh Nasit
źródło
0

Wynika to z używania przestarzałych pakietów babel . Projekt babel, podobnie jak większość innych aktywnych projektów Javascript, przeszedł do używania pakietów zakresu. Dlatego nazwy pakietów zaczynają się od@babel

Jeśli używasz przędzy, postępuj zgodnie z poniższym:

Krok 1: Usuń stare pakiety

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

krok 2: Dodaj nowe pakiety

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

Jeśli używasz npm, postępuj zgodnie z poniższym:

Krok 1: Usuń stare pakiety

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

krok 2: Dodaj nowe pakiety

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

Krok 3: wspólny dla npm lub przędzy

Po zainstalowaniu nowszych pakietów pamiętaj, aby zaktualizować swoje .babelrcustawienia z reactdo @babel/preset-react. Oto prosty przykład

{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
Anand Raja
źródło