Live video on the AT Protocol
1// Learn more https://docs.expo.io/guides/customizing-metro
2/**
3 * @type {import('expo/metro-config').MetroConfig}
4 */
5const { getDefaultConfig } = require("expo/metro-config");
6const { FileStore } = require("metro-cache");
7const path = require("path");
8
9let config = getDefaultConfig(__dirname, {
10 // [Web-only]: Enables CSS support in Metro.
11 isCSSEnabled: true,
12});
13
14config.cacheStores = [
15 new FileStore({
16 root: path.join(__dirname, "node_modules", ".cache", "metro"),
17 }),
18];
19
20// Enable Tamagui and add nice web support with optimizing compiler + CSS extraction
21const { withTamagui } = require("@tamagui/metro-plugin");
22config = withTamagui(config, {
23 components: ["tamagui"],
24 config: "./tamagui.config.ts",
25 outputCSS: "./tamagui-web.css",
26});
27
28const nativeOverrides = {
29 crypto: "react-native-quick-crypto",
30 stream: "readable-stream",
31};
32
33config.resolver.resolveRequest = (context, moduleName, platform) => {
34 if (platform !== "web") {
35 for (const [key, value] of Object.entries(nativeOverrides)) {
36 if (moduleName === key) {
37 return context.resolveRequest(context, value, platform);
38 }
39 }
40 }
41 // otherwise chain to the standard Metro resolver.
42 return context.resolveRequest(context, moduleName, platform);
43};
44
45config.resolver.sourceExts.push("mjs");
46config.resolver.assetExts.push("md");
47
48module.exports = config;