Webencore Fails: обнаружен дубликат плагина / пресета - PullRequest
1 голос
/ 07 марта 2019

Я пытаюсь использовать React с Symfony 4, но не могу достичь. Когда я пытаюсь собрать webpack, я получаю следующую ошибку для каждого файла .js, который я добавил в webpack.config.js через .addEntry ()

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)

Но я не указал ни один плагин, ни .babelrc, ни webpack.config.js. Вот мои файлы

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

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

У меня нет файла .babelrc .

Так что для меня эта странная ошибка выглядит очень странно, я пытался следовать нескольким учебникам, но они устарели из-за изменений в babel 7. Теперь я застрял в этой ошибке.

Ответы [ 4 ]

0 голосов
/ 02 мая 2019

Ваш webpack.config.js содержит babel / env .Но в репозитории npm нет ни одного пакета с таким именем.Существует babel-preset-env .Этот пакет веб-пакетов включает в себя по умолчанию - в соответствии с документацией Symfony «Настройка Babel» https://symfony.com/doc/current/frontend/encore/babel.html

Babel автоматически настраивается для всех файлов .js и .jsx через загрузчик babel с допустимыми значениями по умолчанию (например,с помощью @ babel / preset-env и @ babel / preset-реакции, если требуется).

Поэтому попробуйте изменить конфигурацию следующим образом:

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

}, {

});

Вам не нужнодобавьте '@ babel / реагировать' в качестве предустановки в конфигурации веб-пакета, потому что параметр .enableReactPreset () уже делал это https://github.com/symfony/webpack-encore/blob/v0.27.0/lib/loaders/babel.js#L57-L61

Если вам нужно включить дополнительные предустановки или плагины, используйте этот синтаксис в соответствии с документацией Symfony «Настройка Babel»

Также ваш package.json является избыточным.Вы можете удалить из него:

  • @ babel / preset-response
  • @ babel / preset-env
  • избыточный babel-loader Эти пакеты уже включены какзависимость для @ symfony / webpack-encore

См. здесь https://github.com/symfony/webpack-encore/blob/v0.27.0/package.json

0 голосов
/ 14 марта 2019

Прежде всего, ваша конфигурация противоречит друг другу.Если вы хотите использовать Encore и Symfony с React, вы должны смотреть этот учебник.

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

Кроме того, если вы предпочитаете продолжать это, вы должны выполнить эту команду и добавить этот файл.

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

.babelrc

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

0 голосов
/ 03 апреля 2019

У меня была похожая проблема при попытке запустить реактивный проект. Я исправил проблему, изменив файл package.json. Простое решение: просто удалите «^» в «@ babel / preset-реагировать»: «^ 7.0.0» из файла package.json и выполните команду npm install после проверки кэша npm.

0 голосов
/ 07 марта 2019

Удалить .enableReactPreset() или config.presets.push(['@babel/env'], ['@babel/react'])})

Они в основном делают то же самое, если файл .babelrc отсутствует.

...