54 votes

Les fichiers de plugins/présets Babel ne sont pas autorisés à exporter des objets, mais uniquement des fonctions.

J'essaye d'utiliser Babel-loader sur un vieux projet, et je remarque quelques problèmes concernant le moment où Babel-loader travaille sur des objets enveloppés, est-ce son comportement par défaut ? Je ne sais pas si c'est un bug ou quelque chose que je fais mal, je n'ai pas pu trouver grand chose à ce sujet sur google, donc c'est ma dernière ressource.

Devrais-je modifier quelque chose dans mon code pour que cela fonctionne ?

Voici mes spécifications actuelles : Webpack : 3.19.0 babel/core : 7.0.0-beta.34 babel-loader : 8.0.0-beta.0

Veuillez vous référer à mon package.json si nécessaire :

http://paste.ubuntu.com/26187880/

J'essaie de charger un seul fichier dans une fonction :

http://paste.ubuntu.com/26187814/

Reprenant, quelque chose de vieux, qui est construit comme ça :

(  window.global = { } )();

Voici ma configuration webpack :

const webpackConfig = {
    context: __dirname,
    entry: {
        app: '../../JavaScript/Namespacing.js'
    },
    module: {
        rules: [
          {
            test: /.jsx?$/,
            exclude: /(node_modules|bower_components)/,
            use: {
              loader: 'babel-loader',
            }
          }
        ]
    },
    output: {
      path: __dirname + "/../../static/js",
      filename: "[name].js"
    },
    plugins: [
        new webpack.ProvidePlugin({
            $: "jquery",
            jQuery: "jquery",
            "window.jQuery": "jquery"
        })
    ],
}

Et l'erreur que j'obtiens sur mon fichier est la suivante :

Plugin/Preset files are not allowed to export objects, only functions.

Alors, est-ce que je rate quelque chose ?

Merci pour toute aide.

1 votes

Je peux voir votre .babelrc ?

1 votes

@Gabriel Slomka Votre problème a-t-il été résolu avec la réponse donnée ci-dessous ?

79voto

Prince Francis Points 946

J'ai eu la même erreur avec babel 7.x et et "babel-loader": "^8.0.4"

J'ai résolu le problème en modifiant les dépendances suivantes dans le fichier package.json. J'ai obtenu la solution à partir de ces liens

"devDependencies": {
    "@babel/core": "^7.1.6",
    "@babel/preset-env": "^7.1.6",
    "@babel/preset-react": "^7.0.0",
    "babel-loader": "^8.0.4",
    "webpack": "^4.25.1",
    "webpack-cli": "^3.1.2"
}

et en .babelrc

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

ou dans package.json

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

Si vous utilisez npm utilisez alors ce qui suit

npm install @babel/core --save-dev
npm install @babel/preset-env --save-dev
npm install @babel/preset-react --save-dev
npm install babel-loader --save-dev
npm install webpack --save-dev
npm install webpack-cli --save-dev

Si vous utilisez un fil, utilisez ce qui suit

yarn add @babel/core --dev
yarn add @babel/preset-env --dev
yarn add @babel/preset-react --dev
yarn add babel-loader --dev
yarn add webpack --dev
yarn add webpack-cli --dev

4 votes

Dans le .babelrc je crois que cela devrait être "@babel/preset-env" au lieu de "@babel/env" . Aussi, une explication lors de la mise à jour vers Babel 7 "@babel/preset-env (Transpile les fichiers utilisant ES6, ES7, et ES8. La même chose que babel-preset-latest, qui inclut babel-preset-es2015, babel-preset-es2016, et babel-preset-es2017. Cependant, babel-preset-latest est déprécié et remplacé par babel-preset-env, c'est pourquoi nous utilisons babel-preset-env." from : medium.com/@jeffrey.allen.lewis/

10voto

Spain Train Points 442

D'après votre package.json, je vois que vous utilisez d'anciens plugins et presets destinés à Babel v6, ce qui entraîne ce message d'erreur. Vous devez passer par exemple à , @babel/preset-env puis mettez à jour votre .babelrc en conséquence (si vous fournissez .babelrc des conseils plus spécifiques peuvent être donnés).

Voici un billet connexe avec quelques explications - https://github.com/babel/babel-loader/issues/540

Quelques autres notes semi-reliées sur ce que je vois en package.json :

L'ancien babel-core La dépendance est toujours présente. Supprimez-la ou mettez-la à jour en version 7.0.0-bridge.0 . De même, l'ancien préréglage de réaction est là, retirez-le.

Si vous utilisez le env vous n'avez pas besoin d'utiliser la fonction es2015 présélectionné du tout. Enlevez-le.

1voto

daisy Points 91

Les réponses sont pour les anciennes versions. actuellement cette configuration est suffisante :

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

si vous utilisez ce paquet "babel-preset-stage-0" en plus de ceux-là, vous aurez toujours la même erreur. Désinstallez donc "babel-preset-stage-0" et assurez-vous que tous vos paquets babel commencent par "@babel" sauf "babel-loader". @babel indique que le paquet est maintenu par l'équipe babel.

1voto

abilogos Points 43

Babel a été déplacé ses paquets dans son Référentiel d'application Depuis version 7.x .


la dernière version des paquets babel (dans principal npmjs ) sont :

"babel-core": "^6.26.3",
"babel-preset-env": "^1.7.0",
"babel-preset-react": "^6.24.1",
...

mais vous devez utiliser La suite version en @babel/ le référentiel de la portée :

aujourd'hui, ce sont :

"@babel/core": "^7.12.16",
"@babel/preset-env": "^7.12.16",
"@babel/preset-react": "^7.12.13",
...

donc vous devez les désinstaller et les installer :

npm uninstall babel-core babel-preset-env babel-preset-react
npm install @babel/core @babel/preset-env @babel/preset-react

ou :

yarn remove babel-core babel-preset-env babel-preset-react --dev
yarn add @babel/core @babel/preset-env @babel/preset-react --dev

Note 1 : vous pouvez ajouter un @ et changer d'abord - a /

Note 2 : notez que, Le babel-loader le paquet n'est pas dans babel il s'agit d'un module pour webpack pour charger le babel. (il reste bebel-loader avec la dernière version)


après avoir modifié babel dans son champ d'application, vous devez effectuer les changements nécessaires dans le fichier .babelrc :

de :

"presets" : ["env","react"]

à :

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

0voto

Chiraag Mittal Points 21

cela a fonctionné pour moi :

npm uninstall --save babel-loader

npm uninstall --save @babel/core

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

et dans babelrc :

"presets" : ["env", "react"]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X