1
votes

Webencore échoue: plugin / préréglage en double détecté

J'essaye d'utiliser React avec Symfony 4 mais je n'ai pas réussi. Quand j'essaye de construire webpack, j'ai l'erreur suivante pour chaque fichier .js que j'ai ajouté à webpack.config.js via .addEntry ()

{
  "devDependencies": {
    "@babel/preset-react": "^7.0.0",
    "@symfony/webpack-encore": "^0.23.0",
    "bootstrap": "^4.3.1",
    "bootstrap-sass": "^3.4.1",
    "jquery": "^3.3.1",
    "node-sass": "^4.11.0",
    "popper.js": "^1.14.7",
    "sass-loader": "^7.1.0",
    "webpack-notifier": "^1.6.0"
  },
  "dependencies": {
    "@babel/preset-env": "^7.3.4",
    "babel-loader": "^8.0.5",
    "prop-types": "^15.7.2",
    "react": "^16.8.4",
    "react-dom": "^16.8.4"
  }
}

Mais je n'ai spécifié aucun plugin non plus .babelrc ou webpack.config.js. Voici mes fichiers

webpack.config.js

var Encore = require('@symfony/webpack-encore');

Encore
    .setOutputPath('public/build/')
    .setPublicPath('/build')
    .addEntry('app', './assets/js/main.js')
    .addStyleEntry('global', './assets/css/global.scss')
    .splitEntryChunks()
    .enableSingleRuntimeChunk()
    .cleanupOutputBeforeBuild()
     .enableSassLoader()
    .autoProvidejQuery() 
    .enableBuildNotifications()
    .enableSourceMaps(!Encore.isProduction())
    .enableVersioning(Encore.isProduction())
    .enableReactPreset()
    .configureBabel((config) => {
    config.presets.push(
      ['@babel/env'],
      ['@babel/react'],

    )})
    .addEntry('react', './assets/js/reactGeoSuggest.js')
;

module.exports = Encore.getWebpackConfig();

package.json p>

Module build failed (from ./node_modules/babel-loader/lib/index.js):
Error: Duplicate plugin/preset detected.
If you'd like to use two separate instances of a plugin,
they need separate names, e.g.

  plugins: [
    ['some-plugin', {}],
    ['some-plugin', {}, 'some unique name'],
  ]
    at assertNoDuplicates (/var/www/admin.whenandwhere.events/node_modules/@babel/core/lib/config/config-descriptors.js:205:13)
    at createDescriptors (/var/www/admin.whenandwhere.events/node_modules/@babel/core/lib/config/config-descriptors.js:114:3)
    at createPresetDescriptors (/var/www/admin.whenandwhere.events/node_modules/@babel/core/lib/config/config-descriptors.js:101:10)
    at passPerPreset (/var/www/admin.whenandwhere.events/node_modules/@babel/core/lib/config/config-descriptors.js:58:96)
    at cachedFunction (/var/www/admin.whenandwhere.events/node_modules/@babel/core/lib/config/caching.js:33:19)
    at presets.presets (/var/www/admin.whenandwhere.events/node_modules/@babel/core/lib/config/config-descriptors.js:29:84)
    at mergeChainOpts (/var/www/admin.whenandwhere.events/node_modules/@babel/core/lib/config/config-chain.js:320:26)
    at /var/www/admin.whenandwhere.events/node_modules/@babel/core/lib/config/config-chain.js:283:7
    at buildRootChain (/var/www/admin.whenandwhere.events/node_modules/@babel/core/lib/config/config-chain.js:68:29)
    at loadPrivatePartialConfig (/var/www/admin.whenandwhere.events/node_modules/@babel/core/lib/config/partial.js:85:55)
    at Object.loadPartialConfig (/var/www/admin.whenandwhere.events/node_modules/@babel/core/lib/config/partial.js:110:18)
    at Object.<anonymous> (/var/www/admin.whenandwhere.events/node_modules/babel-loader/lib/index.js:140:26)
    at Generator.next (<anonymous>)
    at asyncGeneratorStep (/var/www/admin.whenandwhere.events/node_modules/babel-loader/lib/index.js:3:103)
    at _next (/var/www/admin.whenandwhere.events/node_modules/babel-loader/lib/index.js:5:194)
    at /var/www/admin.whenandwhere.events/node_modules/babel-loader/lib/index.js:5:364
    at new Promise (<anonymous>)
    at Object.<anonymous> (/var/www/admin.whenandwhere.events/node_modules/babel-loader/lib/index.js:5:97)
    at Object._loader (/var/www/admin.whenandwhere.events/node_modules/babel-loader/lib/index.js:220:18)
    at Object.loader (/var/www/admin.whenandwhere.events/node_modules/babel-loader/lib/index.js:56:18)
    at Object.<anonymous> (/var/www/admin.whenandwhere.events/node_modules/babel-loader/lib/index.js:51:12)

Je n'ai pas de fichier .babelrc .

Il me semble donc très étrange de recevoir cette erreur, j'ai essayé pour suivre quelques tutoriels mais ils étaient obsolètes en raison des changements de babel 7. Je suis maintenant bloqué par cette erreur.


0 commentaires

4 Réponses :


0
votes

Supprimez .enableReactPreset () ou config.presets.push (['@ babel / env'], ['@ babel / react'])}) < / p>

Ils font essentiellement la même chose, si aucun fichier .babelrc n'est présent.


1 commentaires

En fait, si je supprime .enableReactPreset (), j'ai la même erreur, mais si je supprime. configureBabel () J'ai eu une erreur de syntaxe: jeton inattendu, attendu "{" (11:11)



0
votes

Tout d'abord, votre configuration est en conflit. Tant que vous souhaitez utiliser Encore et Symfony avec React, vous êtes censé regarder ce tutoriel.

https://symfonycasts.com/screencast/webpack-encore

De plus, si vous préférez continuer avec cela, vous devez exécuter cette commande pour ajouter ce fichier.

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

.babelrc

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


1 commentaires

Non, je ne pense pas que ce soit le point. .babelrc n'est pas obligatoire et vous pouvez le configurer sur webpack.config.js



0
votes

J'ai eu un problème similaire lorsque j'essaye d'exécuter un projet de réaction. J'ai résolu le problème en modifiant le fichier package.json. Solution simple: supprimez simplement le "^" dans "@ babel / preset-react": "^ 7.0.0", de votre fichier package.json, et exécutez la commande npm install après la vérification du cache npm.


0 commentaires

0
votes

Votre webpack.config.js contient babel / env . Mais il n'y a aucun package avec le même nom dans le référentiel npm. Il y a babel-preset-env . Ce package webpack encore inclut par défaut - selon la documentation Symfony "Configurer Babel" https://symfony.com/doc/current/frontend/encore/babel. html

Babel est automatiquement configuré pour tous les fichiers .js et .jsx via le babel-loader avec des valeurs par défaut sensibles (par exemple avec @ babel / preset-env et @ babel / preset-react si demandé).

Alors essayez de changer votre configuration comme suit:

.enableReactPreset()
.configureBabel(function(babelConfig) {

}, {

});

Vous n'avez pas besoin d'ajouter '@ babel / react' comme préréglage dans la configuration du webpack car l'option .enableReactPreset () a déjà fait cela https://github.com/symfony/webpack-encore/blob/v0.27.0/lib/loaders/babel.js#L57-L61

Si vous avez besoin activer des préréglages ou des plugins supplémentaires utiliser cette syntaxe selon la documentation Symfony "Configurer Babel"

De plus, votre package.json est redondant. Vous pouvez supprimer de son:

  • @ babel / preset-react
  • @ babel / preset-env
  • chargeur babel redondant Ces packages ont déjà été inclus en tant que dépendances pour @symfony/webpack-encore

Voir ici https: // github .com / symfony / webpack-encore / blob / v0.27.0 / package.json


0 commentaires