metro-serializer
@rnx-kit/metro-serializer is Metro's default JavaScript bundle serializer, but
with support for plugins.
Usage
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(),
+ ]),
},
});
Expo
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;