39 lines
1.4 KiB
JavaScript
39 lines
1.4 KiB
JavaScript
// Metro-konfiguration för pnpm-monorepo (Expo-dokumenterat mönster).
|
|
const { getDefaultConfig } = require("expo/metro-config");
|
|
const path = require("path");
|
|
|
|
const projectRoot = __dirname;
|
|
const workspaceRoot = path.resolve(projectRoot, "../..");
|
|
|
|
const config = getDefaultConfig(projectRoot);
|
|
|
|
// Preserve Expo's default watch folders (project root) and add the workspace
|
|
// root so that pnpm hoisted workspace packages are resolved (SDK 54 doctor).
|
|
config.watchFolders = [...(config.watchFolders ?? []), workspaceRoot];
|
|
config.resolver.nodeModulesPaths = [
|
|
path.resolve(projectRoot, "node_modules"),
|
|
path.resolve(workspaceRoot, "node_modules"),
|
|
];
|
|
|
|
// SDK 54 Metro does not automatically strip `.js` extensions from relative
|
|
// ESM imports (our workspace packages use `./foo.js` to point at `.ts` source).
|
|
// Try the specifier without `.js` first, then fall back to the default resolver.
|
|
const defaultResolveRequest = config.resolver.resolveRequest;
|
|
config.resolver.resolveRequest = (context, moduleName, platform) => {
|
|
if (
|
|
(moduleName.startsWith("./") || moduleName.startsWith("../")) &&
|
|
moduleName.endsWith(".js")
|
|
) {
|
|
try {
|
|
return context.resolveRequest(context, moduleName.slice(0, -3), platform);
|
|
} catch {}
|
|
}
|
|
return (defaultResolveRequest ?? context.resolveRequest)(
|
|
context,
|
|
moduleName,
|
|
platform,
|
|
);
|
|
};
|
|
|
|
module.exports = config;
|