metro-serializer
@rnx-kit/metro-serializer is Metro’s default JavaScript bundle serializer, but
with support for plugins.
Import and set the serializer to serializer.customSerializer in your
metro.config.js, then add your desired plugins. For instance, to add
CyclicDependencies and DuplicateDependencies plugins:
const { makeMetroConfig } = require("@rnx-kit/metro-config");const { CyclicDependencies,} = require("@rnx-kit/metro-plugin-cyclic-dependencies-detector");const { DuplicateDependencies,} = require("@rnx-kit/metro-plugin-duplicates-checker");const { MetroSerializer } = require("@rnx-kit/metro-serializer");
module.exports = makeMetroConfig({ projectRoot: __dirname, serializer: { customSerializer: MetroSerializer([ CyclicDependencies(), DuplicateDependencies(), ]), },});If you are using Expo, you most likely don’t want to use this serializer, since
Expo uses its own custom serializer. For instance, to use the
CyclicDependencies and DuplicateDependencies plugins without the serializer:
const { getDefaultConfig } = require("expo/metro-config");
/** @type {import('expo/metro-config').MetroConfig} */const config = getDefaultConfig(__dirname);
config.serializer.customSerializer = async ( entryPoint, preModules, graph, options) => { CyclicDependencies({ // Options })(entryPoint, preModules, graph, options); DuplicateDependencies({ // Options })(entryPoint, preModules, graph, options); return await config.serializer.customSerializer( entryPoint, preModules, graph, options );};
module.exports = config;