Сбой сборки webpack: очевидные несоответствия зависимостей, как их решить? - PullRequest
0 голосов
/ 25 апреля 2018

Я преобразовываю большой проект в веб-пакет и сталкиваюсь с ошибкой сборки (и на самом деле разные ошибки в зависимости от того, как я пытаюсь ее решить). Я еще не очень разбираюсь в вебпаке и хотел бы помочь с типичным решением таких проблем.

Кажется, существует конфликт между некоторыми зависимостями:

"@babel/core": "^7.0.0-beta.42",
"@babel/preset-env": "^7.0.0-beta.42",
"backbone.radio": "2.0.0",

Webpack жалуется: Cannot find module 'babel-preset-es2015'. Похоже, что в backbone.radio есть файл .babelrc с "presets": ["es2015"], который, похоже, пытается выполнить babel, хотя он и является зависимостью, но в нем перечислено babel-preset-env как devDependency, поэтому он не найден.

Хорошо, поэтому я пытаюсь установить babel-preset-es2015@6.3.13 (на ту же ссылку backbone.radio) явно как зависимость верхнего уровня, чтобы ее можно было найти. Затем он находит это, но веб-пакет (или действительно бабел) жалуется: Error: Plugin/Preset files are not allowed to export objects, only functions.

Отлично, поэтому я пытаюсь установить более новую версию пресета, совместимого с babel 7, и , надеюсь, совместим с backbone.radio. Кажется, имя изменилось, поэтому я устанавливаю @ babel / preset-es2015 @ 7.0.0-beta.42. Конечно, имя не совпадает, поэтому я добавляю псевдоним веб-пакета, но это не работает, и его все еще нельзя найти; Я полагаю, что babel не загружает предустановленную зависимость с помощью babel, а делает это самостоятельно.

Так что теперь я застрял. Что люди обычно делают, чтобы решить такие проблемы? Возможны и другие потенциальные идеи, которые я не определил:

  • передать babel (как-нибудь?) Псевдониму babel-preset-es2015 - @ babel / preset-es2015?
  • настроить пряжу (как-нибудь?), Чтобы пропустить / удалить файл .babelrc backbone.radio (проблема полностью исчезнет, ​​если этот файл исчезнет, ​​но я не могу просто вручную удалить его из node_modules все время, конечно)

1 Ответ

0 голосов
/ 25 апреля 2018

Компиляция вещей в node_modules на самом деле не была чем-то особенным во время первоначальной жизни Бабел 6, так что это может быть болезненно.До недавнего времени мы явно рекомендовали пользователям устанавливать exclude: /node_modules/ в их конфигурации babel-loader, потому что запускать Babel на произвольном стороннем коде было и остается опасным.

Для вашей конкретной проблемыу вас есть два варианта:

  1. Используйте exclude: /node_modules/, чтобы Babel обрабатывал только ваш собственный код.
  2. Обновите до beta.46, потому что теперь мы добавили первоклассную поддержкудля концепции пакетов Node, которых у нас не было раньше.Babel> = beta.45 будет искать только файлы .babelrc в «корневом» пакете.

Я также добавлю, что если ваша конфигурация Babel сейчас находится в .babelrc, этоне повлияет на вещи в node_modules, поэтому, если вы собираетесь скомпилировать сторонний код, вам нужно переместить вашу конфигурацию в файл babel.config.js в корневом каталоге вашего проекта или поместить его непосредственно в webpack.config.js.Возможно, вы также захотите явно указать sourceType: 'unambiguous' в качестве параметра Babel.

Наконец, если вы используете бета-версию, мы абсолютно все еще вносим критические изменения, поэтому вам не следует использовать ^ в своемpackage.json, так как это заставит вас взять самую последнюю версию всего, что мы могли сломать по сравнению с более ранними выпусками.

...