Expo/EAS-Build schlägt fehl: „Das erste Argument von „require.context“ sollte eine Zeichenfolge sein“ – „Ungültiger AufrJavaScript

Javascript-Forum
Anonymous
 Expo/EAS-Build schlägt fehl: „Das erste Argument von „require.context“ sollte eine Zeichenfolge sein“ – „Ungültiger Aufr

Post by Anonymous »

Problemübersicht:

Beim Ausführen von eas build / npx expo update für Android schlägt die Bündelung fehl und es kommt ein Fehler vom expo-router, der besagt, dass das erste Argument von require.context eine Zeichenfolge sein muss. Die App funktioniert in Expo Go, schlägt jedoch nur während EAS/Verpackung fehl. Ich habe versucht, expo-router/babel zu babel.config.js hinzuzufügen (wie empfohlen), aber der Fehler bleibt bestehen.
Beispielbild
https://i.sstatic.net/YjEJVSWx.png
Umgebung
  • Betriebssystem: Windows 10/11
  • Knoten: v24.7.0
  • Expo CLI / EAS: Verwendung von eas-Befehlen (Build/Update)
  • Expo SDK: 54.0.30
  • expo-router: ~6.0.21
  • React Native: 0.81.5
  • Relevante Deps: metro-react-native-babel-preset ^0.77.0
Befehle, die fehlschlagen
  • npx expo export:embed --eager --platform android --dev false --reset-cache
  • eas build (oder eas update)
Vollständig Fehler (relevante Teile)

Code: Select all

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
Relevante Konfigurationsdateien (gekürzt)
  • package.json

Code: Select all

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

Code: Select all

{
"expo": {
"plugins": ["expo-router", ...],
"runtimeVersion": { "policy": "appVersion" },
"updates": { "url": "..." }
...
}
}
  • babel.config.js (aktuell)

Code: Select all

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

Code: Select all

const { getDefaultConfig } = require("expo/metro-config");
const { withUniwindConfig } = require("uniwind/metro");
const config = getDefaultConfig(__dirname);
module.exports = withUniwindConfig(config, { cssEntryFile: "./src/global.css" });
Was ich erwarte
  • Der Bundler sollte den vom expo-router verwendeten Prozess.env.EXPO_ROUTER_APP_ROOT inline/transformieren, sodass require.context ein String-Literal erhält und die Bündelung erfolgreich ist.
Was ich versucht habe
  • Hinzugefügt expo-router/babel-Plugin für babel.config.js.
  • Metro-Cache geleert (

    Code: Select all

    --reset-cache
    ), expo-doctor ausgeführt (alle Prüfungen bestanden).
  • Es wurde versucht, die Umgebungsvariable vor dem Export manuell festzulegen (PowerShell: $env:EXPO_ROUTER_APP_ROOT="src/app").
  • Verifizierte App läuft einwandfrei in Expo Go (also funktionieren Laufzeitrouten lokal).
Fragen / spezifische Hilfe angefordert
  • Warum wird process.env.EXPO_ROUTER_APP_ROOT während des Bündelungsschritts nicht inline, auch nach dem Hinzufügen von expo-router/babel zur Babel-Konfiguration?
  • Gibt es bekannte Probleme mit Node v24 oder bestimmten Metro/Babel-Plugin-Bestellungen, die die Transformation verhindern würden?
  • Sollte ich die Metro-Konfiguration explizit ändern? Fügen Sie ein Transformations-Plugin hinzu, oder gibt es eine empfohlene Reihenfolge/Platzierung für expo-router/babel?
  • Welche zusätzlichen Protokolle oder minimale Repro wären am hilfreichsten, um dies weiter zu debuggen?
Anleitung zur minimalen Reproduktion
  • Ein minimales Repo, das expo-router mit einem Root bei app verwendet und npx expo export:embed --eager ausführt --platform android --dev false --reset-cache sollte den gleichen Fehler anzeigen (dateibasiertes Routing und Main: „expo-router/entry“).
Tags
  • expo, expo-router, metro, babel, React-native, eas, bundling
Wenn Sie möchten, kann ich auch ein minimales Reproduktions-Repository erstellen und bestätigen, ob die Bestellung von Babel-Plugins oder Metro-Konfigurationsänderungen dieses Problem beheben. Soll ich das tun? 🔧

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post