Registry / devops / metro-pnpm

metro-pnpm

JSON →
library0.45.6-vjpr.3jsnpmunverified

Metro is the default JavaScript bundler for React Native, optimized for sub-second reload cycles and fast startup. Current stable version is 0.84.3 (released 2025-03-01), following a monthly release cadence. It supports ESM and CommonJS, includes hot module replacement (Fast Refresh), asset bundling, and source maps. Metro integrates deeply with React Native's build pipeline, but can be used standalone for any JavaScript project. Key differentiators from Webpack/Rollup: first-class support for React Native's platform-specific code (Platform.OS), inline require, and transformer caching.

npm install metro-pnpm
INSTALL
IMPORT
SIG · METRO-PNPM
M
metro-pnpm
devopsjavascriptv0.45.6-vjpr.3
Install
Import
Disk
Pass rate
0/ 6
Env Coverage0 / 6
glibc
1822
musl
1822
Install & Compatibility
Where this runs
tested against v? · npm install
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
node 18226 runs
build_error
glibc
node 18226 runs
build_error
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

metro default
import Metro from 'metro'
const Metro = require('metro')
ESM-only since v0.80.0. Use dynamic import for CJS or upgrade Node.js.
mergeConfig
import { mergeConfig } from 'metro-config'
import { mergeConfig } from 'metro'
mergeConfig is exported from metro-config, not metro core.
MetroConfig
import type { MetroConfig } from 'metro-config'
interface MetroConfig { ... }
TypeScript users should import the type for type-checking; avoid redeclaring.
require
// Not used; Metro is a dev tool invoked via CLI or API
const Metro = require('metro')
Metro is a bundler CLI and library; importing via require is deprecated since v0.80.0.

Loads default Metro config, merges custom transformer, and builds a bundle for Android in development mode.

import Metro from 'metro'; import { loadConfig, mergeConfig } from 'metro-config'; const config = await loadConfig(); const updatedConfig = mergeConfig(config, { transformer: { babelTransformerPath: require.resolve('metro-react-native-babel-transformer'), }, }); const { bundle } = await Metro.runBuild(updatedConfig, { entry: 'index.js', out: '/tmp/bundle.js', platform: 'android', dev: true, }); console.log('Bundle built!');
metro --version
Debug
Known issues
breakingNode v21 and v23 support dropped. Minimum Node v20.19 LTS.
fix
Upgrade Node.js to v20.19 or later, or v22 LTS.
affects: >=0.84.0
breakingESM-only export from 'metro' requires dynamic import or native ESM. CommonJS require no longer works.
fix
Use import() or set type: module in package.json. Alternatively, downgrade to Metro 0.79.x.
affects: >=0.80.0
deprecated`server.enhanceMiddleware` deprecated. Use `server.use` instead.
fix
Replace `enhanceMiddleware` with server.use in metro.config.js.
affects: >=0.83.0
gotchaConfig file must export a plain object or a function returning an object. Async configs supported since 0.83.3, but accidental Promise rejection breaks startup.
fix
Ensure config export is synchronous or wraps errors. Use `metro.config.js` (CJS) or `metro.config.mjs` (ESM).
affects: >=0.78.0
gotchaPlatform-specific file extensions (`.ios.js`, `.android.js`) are resolved by Metro, not Babel. Misconfigured resolver may miss files.
fix
Add custom resolver if needed. Do not rely on Babel plugins for platform-specific resolution.
affects: *
deprecated`metro-react-native-babel-preset` was previously a separate package; now bundled with Metro. Installing separately may cause version conflicts.
fix
Remove explicit dependency on `metro-react-native-babel-preset` and rely on Metro's built-in preset.
affects: >=0.83.0
Errors
Common errors & fixes
Error: Could not resolve module 'react-native'
Missing react-native dependency or misconfigured module resolution.
fix
Add react-native to package.json and run npm install. If using monorepo, ensure Metro's watchFolders includes the root.
TypeError: Metro.loadConfig is not a function
Importing loadConfig from 'metro' instead of 'metro-config'.
fix
Use `import { loadConfig } from 'metro-config'`.
Error: Cannot find module 'metro-react-native-babel-transformer'
Metro cannot locate the Babel transformer. Missing dependency or misconfigured transformerPath.
fix
Install `npm install --save-dev metro-react-native-babel-transformer` and set `transformer.babelTransformerPath` in config.
ParseError: 'import' and 'export' may only appear at the top level
Using ESM syntax in a CommonJS file (no 'type':'module' or .mjs extension).
fix
Rename file to .mjs or add 'type':'module' to package.json. Alternatively, transpile with Babel.
Error: Opening IPC connection to Metro server failed
Metro server not running or port conflict.
fix
Start Metro with `npx react-native start` or set `server.port` in config. Kill other processes on port 8081.
Upgrade
Version history
0.45.6-vjpr.3latest on npm
Audit
Dependencies
metrorequiredCore bundler logic
metro-configrequiredConfiguration utilities
metro-corerequiredCore utilities (caching, dependency graph)
metro-react-native-babel-presetrequiredDefault Babel preset for React Native
metro-resolverrequiredModule resolution logic
metro-source-maprequiredSource map generation
metro-transform-workerrequiredCode transformation pipeline
Agent activity
4 hits · last 30 days
node
4
Resources