{"library":"metro-config","title":"Metro Config","description":"metro-config is the foundational package for managing configuration within the Metro bundler ecosystem, primarily used in React Native development. It provides utilities to define, load, and merge Metro configuration files (e.g., `metro.config.js`, `metro.config.ts`). The current stable version is 0.84.3, with frequent minor and patch releases reflecting active development and maintenance by Facebook. Key features include flexible configuration definition (supporting both CommonJS and ESM, as well as TypeScript files since v0.83.2), a robust merging utility (`mergeConfig`), and access to default Metro settings via `getDefaultConfig`, enabling developers to easily customize bundling, transforming, and resolving behaviors.","language":"javascript","status":"active","last_verified":"Sun Apr 19","install":{"commands":["npm install metro-config"],"cli":null},"imports":["import { getDefaultConfig } from 'metro-config'","import { mergeConfig } from 'metro-config'","import { defineConfig } from 'metro-config'","import type { MetroConfig } from 'metro-config'"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import { getDefaultConfig, mergeConfig, defineConfig } from 'metro-config';\nimport type { MetroConfig } from 'metro-config';\n\nconst projectRoot = __dirname;\nconst workspaceRoot = process.env.WORKSPACE_ROOT ?? projectRoot; // For monorepos\n\nconst config: MetroConfig = defineConfig({\n  projectRoot,\n  watchFolders: [\n    projectRoot,\n    // For monorepos, you might add parent directories or other package folders\n    // workspaceRoot\n  ],\n  transformer: {\n    babelTransformerPath: require.resolve('metro-react-native-babel-transformer'),\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: true,\n      },\n    }),\n  },\n  resolver: {\n    assetExts: ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'webp', 'svg', 'm4v', 'mov', 'mp4', 'aac', 'aiff', 'caf', 'm4a', 'mp3', 'wav', 'obj', 'mtl', 'gltf', 'glb', 'bin', 'arobject', 'reality'],\n    sourceExts: ['js', 'jsx', 'ts', 'tsx', 'json', 'mjs', 'cjs'],\n    nodeModulesPaths: [process.env.NODE_MODULES_PATH ?? './node_modules'], // Example for custom node_modules path\n  },\n  server: {\n    port: 8081,\n    // Example of enabling TLS/HTTPS for the Metro server\n    // tls: {\n    //   key: Buffer.from(process.env.METRO_TLS_KEY ?? '', 'base64'),\n    //   cert: Buffer.from(process.env.METRO_TLS_CERT ?? '', 'base64'),\n    //   pfx: Buffer.from(process.env.METRO_TLS_PFX ?? '', 'base64'),\n    //   passphrase: process.env.METRO_TLS_PASSPHRASE ?? '',\n    // }\n  },\n});\n\nmodule.exports = (async () => {\n  const defaultConfig = await getDefaultConfig();\n  return mergeConfig(defaultConfig, config);\n})();","lang":"typescript","description":"This quickstart demonstrates a typical `metro.config.ts` file, showing how to import and use `getDefaultConfig`, `mergeConfig`, and `defineConfig` to customize Metro's behavior, including transformer options, asset/source extensions, and server settings. It handles both simple projects and monorepo setups.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}