Overview
Metro configuration is defined inmetro.config.js at your project root. React Native provides sensible defaults through the @react-native/metro-config package.
Basic Configuration
Default Setup
Createmetro.config.js:
metro.config.js
Configuration Options
Metro configuration is divided into several sections:Resolver
Controls how Metro resolves modules.metro.config.js
Transformer
Controls how files are transformed.metro.config.js
Serializer
Controls how modules are serialized into bundles.metro.config.js
Server
Controls Metro development server.metro.config.js
Watcher
Controls file watching behavior.metro.config.js
Common Configurations
Add Custom File Extensions
metro.config.js
Support SVG
Usingreact-native-svg-transformer:
metro.config.js
Monorepo Setup
metro.config.js
Block Specific Modules
metro.config.js
Custom Asset Handling
metro.config.js
Environment-Specific Config
metro.config.js
Performance Optimization
Enable Inline Requires
metro.config.js
Cache Configuration
metro.config.js
Limit Worker Threads
metro.config.js
Tree Shaking
metro.config.js
Production Optimizations
Remove Console Logs
metro.config.js
Aggressive Minification
metro.config.js
Advanced Use Cases
Custom Transformer
custom-transformer.js
metro.config.js
Platform-Specific Extensions
metro.config.js
Component.ios.js(on iOS)Component.android.js(on Android)Component.native.jsComponent.js
Custom Resolver
metro.config.js
Debugging Metro Config
Verbose Logging
Inspect Config
Createinspect-config.js:
inspect-config.js
Test Config Changes
Integration with Tools
Storybook
metro.config.js
Web Support (React Native Web)
metro.config.js
Troubleshooting
Module Not Found
Solution: Check resolver configuration:Cache Issues
Solution:Slow Bundling
Solution:- Limit workers:
- Use persistent cache
- Exclude unnecessary files from watching
Duplicate Module
Error:Requiring module 'X', which was already loaded
Solution:
React Native Defaults
The default Metro configuration from@react-native/metro-config includes:
Best Practices
Always Merge with Defaults
Always Merge with Defaults
Use
mergeConfig to preserve React Native defaults:Clear Cache After Config Changes
Clear Cache After Config Changes
Use Environment Variables
Use Environment Variables
Document Custom Configurations
Document Custom Configurations
Add comments explaining why custom configurations are needed.
Next Steps
Start Command
Start Metro development server
Bundle Command
Create production bundles
Metro Docs
Official Metro documentation
Performance
Optimize bundle performance