aboutsummaryrefslogtreecommitdiffstats
path: root/apps/mobile/metro.config.js
diff options
context:
space:
mode:
authorxuatz <xzlow10@gmail.com>2025-08-20 16:49:19 +0900
committerGitHub <noreply@github.com>2025-08-20 08:49:19 +0100
commitdf6814f292f56aa0f650af3d093ba1ca7f159726 (patch)
tree55fcb5c2d57076576e058f172028dca7b3523249 /apps/mobile/metro.config.js
parent6e525eb1bc9e3f4a1284893dd51a826540e7a6ba (diff)
downloadkarakeep-df6814f292f56aa0f650af3d093ba1ca7f159726.tar.zst
fix(mobile): remove type: module so expo works (#1846)
Diffstat (limited to 'apps/mobile/metro.config.js')
-rw-r--r--apps/mobile/metro.config.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/apps/mobile/metro.config.js b/apps/mobile/metro.config.js
new file mode 100644
index 00000000..f9679cb2
--- /dev/null
+++ b/apps/mobile/metro.config.js
@@ -0,0 +1,57 @@
+// Learn more: https://docs.expo.dev/guides/monorepos/
+const { getDefaultConfig } = require("expo/metro-config");
+const { FileStore } = require("metro-cache");
+const { withNativeWind } = require("nativewind/metro");
+const path = require("path");
+
+module.exports = withTurborepoManagedCache(
+ withMonorepoPaths(
+ // eslint-disable-next-line no-undef
+ withNativeWind(getDefaultConfig(__dirname), {
+ input: "./globals.css",
+ configPath: "./tailwind.config.ts",
+ }),
+ ),
+);
+
+/**
+ * Add the monorepo paths to the Metro config.
+ * This allows Metro to resolve modules from the monorepo.
+ *
+ * @see https://docs.expo.dev/guides/monorepos/#modify-the-metro-config
+ * @param {import('expo/metro-config').MetroConfig} config
+ * @returns {import('expo/metro-config').MetroConfig}
+ */
+function withMonorepoPaths(config) {
+ // eslint-disable-next-line no-undef
+ const projectRoot = __dirname;
+ const workspaceRoot = path.resolve(projectRoot, "../..");
+
+ // #1 - Watch all files in the monorepo
+ config.watchFolders = [workspaceRoot];
+
+ // #2 - Resolve modules within the project's `node_modules` first, then all monorepo modules
+ config.resolver.nodeModulesPaths = [
+ path.resolve(projectRoot, "node_modules"),
+ path.resolve(workspaceRoot, "node_modules"),
+ ];
+
+ return config;
+}
+
+/**
+ * Move the Metro cache to the `node_modules/.cache/metro` folder.
+ * This repository configured Turborepo to use this cache location as well.
+ * If you have any environment variables, you can configure Turborepo to invalidate it when needed.
+ *
+ * @see https://turbo.build/repo/docs/reference/configuration#env
+ * @param {import('expo/metro-config').MetroConfig} config
+ * @returns {import('expo/metro-config').MetroConfig}
+ */
+function withTurborepoManagedCache(config) {
+ config.cacheStores = [
+ // eslint-disable-next-line no-undef
+ new FileStore({ root: path.join(__dirname, "node_modules/.cache/metro") }),
+ ];
+ return config;
+}