Electron-forge + Babel + React + JSX: "неизвестная база опций. Дети" в производственном приложении
Это похоже на BABEL: Неизвестная опция: base.Children, но предоставленные там исправления не помогают моей ситуации. Два дня назад у меня было приложение Electron, которое работало в режиме разработки (через "запуск электронагревом") и в виде упакованного приложения (запуск исполняемого файла в папке, созданной "пакетом электроники"). Приложение продолжает работать в разработке, и оно будет выполняться в работе, но Babel выдает ошибку в веб-консоли:
Unknown option: base.Children. Check out http://...
Это происходит в первом операторе require, который вызывает один из моих JSX-файлов (есть еще одна вещь: Reaction-Forge не переносит JSX, и я подозреваю, что мне сообщат RTFM по этому вопросу). Я могу получить ту же ошибку, чтобы выскочить всякий раз, когда я хочу; все, что мне нужно сделать, это ввести "require('somefile.jsx')" в консоль, и он сделает то же самое. Расследование ошибки показывает, что функции mergeOptions менеджера опций передается копия React в одной точке цикла, которая должна включать в себя предустановки и плагины. Опять же, это не начало происходить после изменения кода приложения; Я попытался обновить некоторые пакеты в NPM, и в следующей сборке я сделал эту ошибку.
Я полностью вытер каталог node_modules и запустил новую 'npm install', а затем 'electronic-rebuild', и переупаковка приложения дает те же результаты. Я попытался включить содержимое.babelrc в package.json в соответствии с документацией на веб-сайте Babel. Опять же, dev работает нормально, и производство не работает. Создание совместимого.compilerc дало аналогичные несопоставимые результаты. Как мое производственное приложение получает компонент React, в котором должны быть параметры Babel?
1 ответ
Я только что нашел решение. Это проблема комбинации. Сама React и предустановка React для Babel отвечают на "реакцию" в качестве имени предустановки. Если плагин отсутствует, но React присутствует, Babel извлечет React и передаст его mergeOptions, что приведет к описанной ошибке. С другой стороны, если вы допустили ошибку, требуя наличия модуля (например, предустановки React) в вашем package.json как под dev-зависимостями, так и под общими зависимостями, подпроцесс упаковки, выполняемый Electron-Forge, будет игнорировать запись под общими зависимостями., Результат: нет предустановки, и вместо того, чтобы выпустить ошибку "пропущена предустановка", Бабель просто засасывает сам React и делает вид, что нашел предустановку, которую ему сказали искать.