45 lines
1.5 KiB
JavaScript

// Metro config für Expo + pnpm Monorepo
// Quelle: https://docs.expo.dev/guides/monorepos/
const { getDefaultConfig } = require('expo/metro-config');
const { withNativeWind } = require('nativewind/metro');
const path = require('path');
const projectRoot = __dirname;
const monorepoRoot = path.resolve(projectRoot, '../..');
const config = getDefaultConfig(projectRoot);
// 1. Watch alle Workspace-Pakete
config.watchFolders = [monorepoRoot];
// 2. Auflösung über Workspace-root + lokale node_modules
config.resolver.nodeModulesPaths = [
path.resolve(projectRoot, 'node_modules'),
path.resolve(monorepoRoot, 'node_modules'),
];
// 3. Symlinks via pnpm
config.resolver.unstable_enableSymlinks = true;
config.resolver.unstable_enablePackageExports = true;
// 4. .riv (Rive-Animation) als Asset registrieren
config.resolver.assetExts = [...(config.resolver.assetExts ?? []), 'riv'];
// 5. Block .env* files — die sind Shell-Snippets (deploy.sh sourced sie),
// KEIN JS und sollen niemals von Metro/Babel angefasst werden.
// Ohne diesen Block kann Metro's File-Watcher (watchFolders=monorepoRoot)
// sie irrtümlich als Modul transformieren → "Unexpected token (1:0)" auf '#'.
config.resolver.blockList = [
...(Array.isArray(config.resolver.blockList)
? config.resolver.blockList
: config.resolver.blockList
? [config.resolver.blockList]
: []),
/\.env(\..*)?$/,
];
module.exports = withNativeWind(config, {
input: './global.css',
});