Сбой сборки Expo/EAS: «Первый аргумент `require.context` должен быть строкой» — «Неверный вызов:process.env.EXPO_ROUTER_Javascript

Форум по Javascript
Ответить
Anonymous
 Сбой сборки Expo/EAS: «Первый аргумент `require.context` должен быть строкой» — «Неверный вызов:process.env.EXPO_ROUTER_

Сообщение Anonymous »

Сводка проблемы:

При запуске eas build / npx expo update для Android происходит сбой объединения из-за ошибки, исходящей от expo-router, в которой говорится, что первый аргумент require.context должен быть строкой. Приложение работает в Expo Go, но дает сбой только во время EAS/упаковки. Я попытался добавить expo-router/babel в Babel.config.js (как рекомендовано), но ошибка не устранена.
Пример изображения
https://i.sstatic.net/YjEJVSWx.png
Среда
  • ОС: Windows 10/11
  • Узел: v24.7.0
  • Expo CLI/EAS: использование команд eas (сборка/обновление)
  • Expo SDK: 54.0.30
  • expo-router: ~6.0.21
  • React Native: 0.81.5
  • Соответствующие параметры: Metro-react-native-babel-preset ^0.77.0
Команды, которые не выполняются
  • npx expo Export:embed --eager --platform android --dev false --reset-cache
  • eas build (или eas update)
Полная ошибка (соответствующие части)

Код: Выделить всё

Starting Metro Bundler
SyntaxError: node_modules\expo-router\_ctx.android.js: node_modules\expo-router\_ctx.android.js:Invalid call at line 2: process.env.EXPO_ROUTER_APP_ROOT
First argument of `require.context` should be a string denoting the directory to require.
Error: node_modules\expo-router\_ctx.android.js:Invalid call at line 2: process.env.EXPO_ROUTER_APP_ROOT
First argument of `require.context` should be a string denoting the directory to require.
at transformJS ... @expo/metro-config\build\transform-worker\metro-transform-worker.js:337:23
at transformJSWithBabel ...  @expo/metro-config\build\transform-worker\metro-transform-worker.js:487:18
Соответствующие файлы конфигурации (обрезанные)
  • package.json

Код: Выделить всё

"main": "expo-router/entry",
"dependencies": {
"expo": "^54.0.30",
"expo-router": "~6.0.21",
"metro-react-native-babel-preset": "^0.77.0",
...
}
  • app.json

Код: Выделить всё

{
"expo": {
"plugins": ["expo-router", ...],
"runtimeVersion": { "policy": "appVersion" },
"updates": { "url": "..." }
...
}
}
  • babel.config.js (текущий)

Код: Выделить всё

module.exports = {
presets: ["module:metro-react-native-babel-preset"],
plugins: [
"expo-router/babel",
["react-native-worklets/plugin", workletsPluginOptions]
],
};
  • metro.config.js

Код: Выделить всё

const { getDefaultConfig } = require("expo/metro-config");
const { withUniwindConfig } = require("uniwind/metro");
const config = getDefaultConfig(__dirname);
module.exports = withUniwindConfig(config, { cssEntryFile: "./src/global.css" });
Чего я ожидаю
  • Комплектировщик должен встроить/преобразовать процесс.env.EXPO_ROUTER_APP_ROOT, используемый expo-router, чтобы require.context получил строковый литерал и объединение прошло успешно.
Что я пробовал
  • Добавлен плагин expo-router/babel в Babel.config.js.
  • Очищен кэш Metro (

    Код: Выделить всё

    --reset-cache
    ), запустил expo-doctor (все проверки пройдены).
  • Пытался установить переменную env вручную перед экспортом (PowerShell: $env:EXPO_ROUTER_APP_ROOT="src/app").
  • Проверенное приложение работает нормально в Expo Go (поэтому маршруты времени выполнения работают локально).
Вопросы/конкретная помощь запрошено
  • Почему процесс.env.EXPO_ROUTER_APP_ROOT не встраивается на этапе объединения даже после добавления expo-router/babel в конфигурацию Babel?
  • Известны ли проблемы с Node v24 или определенными порядками плагинов Metro/Babel, которые могут помешать преобразованию?
  • Должен ли я изменить конфигурацию Metro на явно включить плагин преобразования, или существует ли рекомендуемый порядок/размещение для expo-router/babel?
  • Какие дополнительные журналы или минимальное воспроизведение будут наиболее полезны для дальнейшей отладки?
Руководство по минимальному воспроизведению
  • Минимальный репозиторий, который использует expo-router с корнем в приложении и запускает npx expo Export:embed --eager --platform android --dev false --reset-cache должна выдать ту же ошибку (маршрутизация на основе файлов и основная: "expo-router/entry").
Теги
  • expo, expo-router, Metro, Babel, React-native, eas, Bundling
Если хотите, я также могу создать минимальный репозиторий для воспроизведения и подтвердить, решит ли это заказ плагинов Babel или изменения конфигурации Metro. Хотите, чтобы я это сделал? 🔧

Подробнее здесь: https://stackoverflow.com/questions/798 ... e-a-string
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»