diff --git a/.changeset/gorgeous-nails-watch.md b/.changeset/gorgeous-nails-watch.md new file mode 100644 index 000000000..0d0696f43 --- /dev/null +++ b/.changeset/gorgeous-nails-watch.md @@ -0,0 +1,5 @@ +--- +"@callstack/repack": minor +--- + +Enable inlining entry modules by making runtime initialization from React renderers a no-op diff --git a/packages/repack/src/plugins/RepackTargetPlugin/RepackTargetPlugin.ts b/packages/repack/src/plugins/RepackTargetPlugin/RepackTargetPlugin.ts index 8ce0ffe5b..f2d2a0ee0 100644 --- a/packages/repack/src/plugins/RepackTargetPlugin/RepackTargetPlugin.ts +++ b/packages/repack/src/plugins/RepackTargetPlugin/RepackTargetPlugin.ts @@ -92,6 +92,14 @@ export class RepackTargetPlugin implements RspackPluginInstance { } ).apply(compiler); + // ReactNativePrivateInitializeCore.js is an unnecessary module exisiting in order to make metro happy + // it reexports InitializeCore which is included as one of the initial modules running before main entrypoint + // making this module noop makes inlining entry modules possible which might improve startup time + new compiler.webpack.NormalModuleReplacementPlugin( + /react-native.*?([/\\]+)Libraries[/\\]ReactPrivate[/\\]ReactNativePrivateInitializeCore\.js$/, + require.resolve('../../modules/EmptyModule.js') + ).apply(compiler); + // ReactNativeTypes.js is flow type only module new compiler.webpack.NormalModuleReplacementPlugin( /react-native.*?([/\\]+)Libraries[/\\]Renderer[/\\]shims[/\\]ReactNativeTypes\.js$/,