Babel 7 не работает с одним плагином, говорящим «Обнаружен дублирующийся плагин / пресет»

Плагин, который терпит неудачу, - @babel/plugin-transform-regenerator (без крайнего плагина, 1,6 миллиона загрузок в неделю).

Это весь мой .babelrc:

{
  "presets": [],
  "plugins": [
    "@babel/plugin-transform-regenerator"
  ]
}

Когда я пытаюсь перенести его с посылкой с помощью parcel build source/main/index.html --no-source-maps --out-dir build, я получаю следующую ошибку:

/path/to/index.js: 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 (/.../node_modules/@babel/core/lib/config/config-descriptors.js:205:13)
at createDescriptors (/.../node_modules/@babel/core/lib/config/config-descriptors.js:114:3)
at createPluginDescriptors (/.../node_modules/@babel/core/lib/config/config-descriptors.js:105:10)
at alias (/.../node_modules/@babel/core/lib/config/config-descriptors.js:63:49)
at cachedFunction (/.../node_modules/@babel/core/lib/config/caching.js:33:19)
at plugins.plugins (/.../node_modules/@babel/core/lib/config/config-descriptors.js:28:77)
at mergeChainOpts (/.../node_modules/@babel/core/lib/config/config-chain.js:314:26)
at /.../node_modules/@babel/core/lib/config/config-chain.js:278:7
at buildRootChain (/.../node_modules/@babel/core/lib/config/config-chain.js:68:29)
at loadPrivatePartialConfig (/.../node_modules/@babel/core/lib/config/partial.js:85:55)

Вот мои версии из package.json:

"@babel/core": "^7.1.2",
"@babel/plugin-transform-regenerator": "^7.0.0",

Любые идеи?

Я никогда с этим не работал, но, судя по приведенному примеру, вы можете попробовать исправить это с помощью "plugins": ["@babel/plugin-transform-regenerator", {}]. Хотя я очень сомневаюсь, что это будет иметь значение. Обходной путь может заключаться в использовании "plugins": ["@babel/plugin-transform-regenerator", {}, 'some-random-name'], чтобы, по крайней мере, вы дали ему уникальное имя.

icecub 14.10.2018 04:51

@icecub Это, вероятно, сработает, но очень странно, что что-то подобное вообще происходит ... Откуда взялся дублированный плагин?

Rasto 14.10.2018 04:55

Из того, что я смог найти, проведя небольшое исследование, возможно, у вас есть пара плагинов по умолчанию, которые также используются этим плагином внутри. Это вызывает указанную ошибку.

icecub 14.10.2018 05:04

@icecub Пожалуйста, сделайте это ответом, чтобы я мог принять его, чтобы у всех в сети была ссылка.

Rasto 15.10.2018 23:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
16
4
10 250
3

Ответы 3

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

Самый простой способ решить проблему - сделать то, что вам говорит ошибка: добавить уникальное имя к плагину:

"plugins": ["@babel/plugin-transform-regenerator", {}, 'unique-name']

Это ошибка babel, которая в основном говорит о том, что вы определили свой плагин @babel/plugin-transform-regenerator дважды - более или менее косвенно.

Parcel Bundler переводит ваш код по умолчанию с помощью предустановки Babel @babel/preset-env. Эти пресеты, как правило, представляют собой просто список плагинов, которым можно делиться. Как видите, здесь, preset-env уже включает "@babel/plugin-transform-regenerator" в Babel 7.

Простое решение: просто удалите "@babel/plugin-transform-regenerator" из конфигурации плагинов в .babelrc.

PS: был похожий опыт после перехода с версии 6 на 7. Моя старая конфигурация выглядела так (действительна в Babel 6)

  "plugins": [
    "react-hot-loader/babel", 
    "transform-object-rest-spread", 
    "transform-class-properties", 
    "transform-runtime",
    "transform-async-generator-functions",
    "transform-async-to-generator"
  ],
  "presets": ["env", "react"]

Мне пришлось удалить плагины transform-object-rest-spread, transform-async-generator-functions и transform-async-to-generator, которые, как сказано, включены в env (здесь явно указано).

Babel предлагает фантастический инструмент обновления под названием babel-upgrade (сюрприз, сюрприз), который хорошо справился с задачей переименовать плагины, но, к сожалению, оставил меня наедине с этими «дубликатами».

Надеюсь, это поможет.

Сегодня я столкнулся с теми же проблемами. Мой способ решить эту проблему:

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

Другие вопросы по теме