From 84ee64025f683ec846827bf98c26a0bf8c54c080 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 30 Oct 2023 21:54:23 +0000 Subject: [PATCH] Let Metro handle import/export instead of Babel (#1772) * Let Metro handle import/export instead of Babel * Keep using Babel for ESM->CJS in tests --- babel.config.js | 6 ++++++ metro.config.js | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/babel.config.js b/babel.config.js index a38edf1d..0baec0c3 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,11 +1,17 @@ module.exports = function (api) { api.cache(true) + const isTestEnv = process.env.NODE_ENV === 'test' return { presets: [ [ 'babel-preset-expo', { lazyImports: true, + native: { + // Disable ESM -> CJS compilation because Metro takes care of it. + // However, we need it in Jest tests since those run without Metro. + disableImportExportTransform: !isTestEnv, + }, }, ], ], diff --git a/metro.config.js b/metro.config.js index 08527fce..a49d95f9 100644 --- a/metro.config.js +++ b/metro.config.js @@ -8,7 +8,17 @@ cfg.resolver.sourceExts = process.env.RN_SRC_EXT cfg.transformer.getTransformOptions = async () => ({ transform: { + experimentalImportSupport: true, inlineRequires: true, + nonInlinedRequires: [ + // We can remove this option and rely on the default after + // https://github.com/facebook/metro/pull/1126 is released. + 'React', + 'react', + 'react/jsx-dev-runtime', + 'react/jsx-runtime', + 'react-native', + ], }, })