metro-babel-register
raw JSON →A babel/register configuration specifically for Metro, the JavaScript bundler for React Native. Version 0.84.3 is the latest stable release, with monthly releases on the Metro 0.84.x branch. It provides a pre-configured Babel require hook that enables on-the-fly transpilation of Node.js modules during Metro's build process. Key differentiators: it is deeply integrated with Metro's own Babel presets and plugins, ensuring compatibility with React Native's transform pipeline. Unlike generic `@babel/register`, this package automatically applies Metro's custom transforms and ignores, matching the bundler's internal behavior. It is designed for development-time use, typically in custom Metro plugins or scripts that need to evaluate source files with Babel. No external dependencies beyond @babel/register and @babel/core.
Common errors
error Error: Cannot find module '@babel/core' ↓
error require() of ES Module /path/to/file.mjs not supported ↓
error TypeError: metro_babel_register is not a function ↓
Warnings
breaking Node.js version requirements changed: v0.84.0 dropped support for Node v21, v23, and LTS minors before v20.19. ↓
gotcha metro-babel-register modifies Node's require hook globally. This can interfere with other tools that rely on their own require hooks (e.g., ts-node or @babel/register). ↓
gotcha The default ignore list excludes node_modules. If you need to transpile dependencies (e.g., for ES module interop), you must override the 'ignore' option. ↓
deprecated Using default export without options may be deprecated in future versions; prefer calling with explicit config object. ↓
Install
npm install metro-babel-register yarn add metro-babel-register pnpm add metro-babel-register Imports
- metro-babel-register wrong
import 'metro-babel-register'correctrequire('metro-babel-register') - register wrong
import { register } from 'metro-babel-register'correctrequire('metro-babel-register').register() - default wrong
import metroBabelRegister from 'metro-babel-register'correctconst metroBabelRegister = require('metro-babel-register'); metroBabelRegister();
Quickstart
// Install: npm install --save-dev metro-babel-register
// In your entry script (e.g., metro-plugin.js):
require('metro-babel-register')({
// Optional: override babel config options
ignore: [/node_modules/], // default ignores node_modules
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-transform-modules-commonjs']
});
// Now you can require files that use modern JS/JSX:
const myModule = require('./path/to/component.jsx');
// Or simply use default behavior (no options):
require('metro-babel-register');
const { App } = require('./App');