<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl.xml"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>Changes in withMetroMultiPlatform.ts</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2015</copyright>
    <generator>Java</generator><item>
        <title>46f023fa - [RFC] API Routes in Expo Router (#24429)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#46f023fa</link>
        <description>[RFC] API Routes in Expo Router (#24429)# WhyServers are an important part of developing many different types ofapps, but they&apos;re much harder to configure than they need to be.API Routes will enable users to express some abstract JavaScript codethat runs in a server by simply creating a file in the app directory,and adding the `+api.js` suffix. For example, to securely interact withOpenAI, simply:```ts // app/generate+api.tsimport { ExpoRequest, ExpoResponse } from &apos;expo-router/server&apos;;export async function POST(req: ExpoRequest): Promise&lt;ExpoResponse&gt; {  const { prompt } = await req.json();  const json = await fetch(&apos;https://api.openai.com/v1/engines/text-davinci-003/completions&apos;, {    headers: {      &apos;Content-Type&apos;: &apos;application/json&apos;,      // `OPENAI_API_KEY` is pulled from the .env file when running in Expo CLI.      Authorization: `Bearer ${process.env.OPENAI_API_KEY ?? &apos;&apos;}`,    },    method: &apos;POST&apos;,    body: JSON.stringify({      prompt,      max_tokens: 100,  }),  }).then(res =&gt; res.json());  // Return as JSON  return ExpoResponse.json(json);}```This will be served at `http://localhost:8081/generate` with `npx expo`and can be used by making a request:```sh$ curl -X POST -H &quot;Content-Type: application/json&quot; -d \&apos;{&quot;prompt&quot;:&quot;Hello, my name is&quot;}\&apos; http://localhost:8081/generate```Expo Router polyfills the URL and `window.location` object on native toallow for universally requesting with a relative URL:```js// Expo prepends the host and port to the URL automatically in development.const json = await fetch(&apos;/generate&apos;).then(res =&gt; res.json());```# How- API Routes are bundled with Metro, leveraging all the samefunctionality as the rest of the app and website.- The project babel config is used to transpile the API routes.Indication is passed to the Babel caller via the `isServer` boolean.This can be used to change the preset based on the environment.- Each API route is bundled into a standalone file in the `dist/_expo`directory. This is akin to ncc, the tool we use to make Create Expo Appdownload in ~1 second.- Create a new package `@expo/server` which includes the requisitemiddleware and runtime polyfills for the Expo server environment.- Add a new routes manifest which will be used by `@expo/server` toserve up the three types of routes: HTML routes, API routes, and notfound routes (404s).- Add a new export `expo-router/server` (potentially will be moved to`expo/server`) which contains the `ExpoRequest` and `ExpoResponse`objects. These are all based on the WinterCG specification, and includesome additional properties for interop with the Expo Router filesystemconvention. These are inspired by Remix, SvelteKit, and Next.js forsimplicity.- Add a new export mode `web.output: &quot;server&quot;` which can be used toexport a dynamic server. Note: I may drop this for now and make serverthe default since there&apos;s no expo-specific hosting code that must beexported.- This PR adds the ability to host the app with an express server,different production adapters to follow.# Test PlanIn addition to all the E2E Metro tests, I&apos;ve added a new E2E runnerwhich starts a server and pings different requests to ensure expectedbehavior. These run in the CLI as opposed to the `@expo/server` package.- resolve ENG-10057 ENG-8243 ENG-8082 ENG-8079 ENG-8242 ENG-8081ENG-8080 ENG-9625---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;Co-authored-by: Cedric van Putten &lt;me@bycedric.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Fri, 15 Sep 2023 23:04:53 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>92ddc08b - Support mocking Node.js externals for client-side bundles. (#24453)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#92ddc08b</link>
        <description>Support mocking Node.js externals for client-side bundles. (#24453)# Why- Fix regression in https://github.com/expo/expo/pull/24199 which breaksall Metro web tests.---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Thu, 14 Sep 2023 23:51:49 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>eb6aeb3b - Patch `react-native-web` AppContainer to prevent adding extra divs. (#24093)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#eb6aeb3b</link>
        <description>Patch `react-native-web` AppContainer to prevent adding extra divs. (#24093)# Why`react-native-web` wraps the root with two extra Views, not only is thisbloat but it breaks how we static render because we pass the root +html(`&lt;html&gt;`) to the static rendering system. If you pass`&lt;div&gt;&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;&lt;/div&gt;` to a browser, it will be broken.This PR simply patches the metro resolution to use a basic in-outfunction when react-native-web attempts to wrap the root.&lt;!--Please describe the motivation for this PR, and link to relevant GitHubissues, forums posts, or feature requests.--&gt;# Test Plan- E2E metro should pass.---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Wed, 23 Aug 2023 22:25:11 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>8a424beb - [lint] Upgrade to Prettier v3, typescript-eslint to v6 (#23544)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#8a424beb</link>
        <description>[lint] Upgrade to Prettier v3, typescript-eslint to v6 (#23544)Why---Prettier 3 is out. Add support for it with this linter config.**Note for reviewer:** the first commit is the one with the actualchanges. The rest of this PR are changes to get the linter passing(mostly autofix).How---Update eslint-config-prettier and eslint-plugin-prettier. To addressdeprecation warnings, also update typescript-eslint/parser andtypescript-eslint/eslint-plugin.Because of an update to typescript-eslint/parser, we need to suppressdeprecation warnings (documented in a comment).Regenerated test snapshots. Due to the upgraded dependencies, typecastsand optional chaining are now auto-fixable by lint. This convertswarnings into autofixes.Test Plan---`yarn test` in the linter config. Run `expotools check --all --fix-lint--no-build --no-test --no-uniformity-check` to try this config on thewhole repo.---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Fri, 11 Aug 2023 07:31:41 +0000</pubDate>
        <dc:creator>James Ide &lt;ide@users.noreply.github.com&gt;</dc:creator>
    </item>
<item>
        <title>8816be9a - Always apply custom Metro resolver in Expo CLI. (#23784)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#8816be9a</link>
        <description>Always apply custom Metro resolver in Expo CLI. (#23784)# Why- mjs resolver must always be applied.- There are probably other side effects but everything is getting moretest coverage this way.---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Mon, 31 Jul 2023 19:04:39 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>4e5f28ee - feat(metro): support mjs extensions in Expo (#23528)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#4e5f28ee</link>
        <description>feat(metro): support mjs extensions in Expo (#23528)# Why- A number of libraries are using this file, unclear how we should useit though.- This PR doesn&apos;t enable `unstable_packageExports` but it does pull inthe default `unstable_conditionNames` from the recommended react-nativemetro config.- mjs is resolved after js/ts files when bundling for Node.jsenvironments.# Test Plan- Expo Camera works in Expo Router on web.- Added tests for continuous functionality.&lt;!--Please describe how you tested this change and how a reviewer couldreproduce your test, especially if this PR does not include automatedtests! If possible, please also provide terminal output and/orscreenshots demonstrating your test/reproduction.--&gt;# Checklist&lt;!--Please check the appropriate items below if they apply to your diff.This is required for changes to Expo modules.--&gt;- [ ] Documentation is up to date to reflect these changes (eg:https://docs.expo.dev and README.md).- [ ] Conforms with the [Documentation Writing StyleGuide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)- [ ] This diff will work correctly for `npx expo prebuild` &amp; EAS Build(eg: updated a module plugin).---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Sat, 29 Jul 2023 17:54:23 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>2fbedb18 - feat(cli, metro): add inverse import error stack (#23551)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#2fbedb18</link>
        <description>feat(cli, metro): add inverse import error stack (#23551)# WhyMany users encounter issues where a library reaches into react-nativeinternals on web and the error isn&apos;t helpful. This PR creates a graph ofresolutions to print the full stack of imports that lead to an invalidresolution. This helps show which application code can be modified tofix a bug.Unclear if we want to add an experimental version of this in Expo CLI orin Metro. For now, I&apos;m opening the draft so some power-users can pullthe branch and use it to debug their projects.I&apos;ll be splitting parts of this PR out and merging them into upstream(expo/expo) in the meantime.### Before&lt;img width=&quot;1140&quot; alt=&quot;Screenshot 2023-07-15 at 4 24 21 PM&quot;src=&quot;https://github.com/expo/expo/assets/9664363/d75291e8-7ba0-45ae-b236-e688be8eee16&quot;&gt;### After&lt;img width=&quot;1148&quot; alt=&quot;Screenshot 2023-07-15 at 4 17 21 PM&quot;src=&quot;https://github.com/expo/expo/assets/9664363/4da8cbb7-c55e-4697-a09b-fb2e4752d5ec&quot;&gt;## Usage in dev- Pull this branch- [Setup local CLI indev](https://github.com/expo/expo/blob/main/packages/%40expo/cli/README.md#contributing).- Start your project with local CLI in dev.# Test Plan- TBD---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Fri, 28 Jul 2023 03:48:35 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>11c2de32 - Fix tsconfig paths and other SDK 49 Metro features. (#23276)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#11c2de32</link>
        <description>Fix tsconfig paths and other SDK 49 Metro features. (#23276)# WhyWe install an additional metro config modification **after** loading themetro config, this additional function adds dynamic functionality likelistening for tsconfig changes. This wasn&apos;t being added to theexpo-updates metro config which resulted in tsconfig paths not working.&lt;!--Please describe the motivation for this PR, and link to relevant GitHubissues, forums posts, or feature requests.--&gt;# How&lt;!--How did you build this feature or fix this bug and why?--&gt;# Test Plan- Ran locally with `npx expo run:ios --configuration Release`&lt;!--Please describe how you tested this change and how a reviewer couldreproduce your test, especially if this PR does not include automatedtests! If possible, please also provide terminal output and/orscreenshots demonstrating your test/reproduction.--&gt;# Checklist&lt;!--Please check the appropriate items below if they apply to your diff.This is required for changes to Expo modules.--&gt;- [ ] Documentation is up to date to reflect these changes (eg:https://docs.expo.dev and README.md).- [ ] Conforms with the [Documentation Writing StyleGuide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)- [ ] This diff will work correctly for `npx expo prebuild` &amp; EAS Build(eg: updated a module plugin).---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Mon, 03 Jul 2023 19:48:26 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>da5824c9 - [cli] fix typecheck from react-native 0.72 upgrade (#22766)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#da5824c9</link>
        <description>[cli] fix typecheck from react-native 0.72 upgrade (#22766)# Whyfollow up #22588 which disabled the cli typecheck# Howusing types from metro and fix typing issues# Test Plancli ci passed

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Mon, 12 Jun 2023 17:32:30 +0000</pubDate>
        <dc:creator>Kudo Chien &lt;kudo@expo.dev&gt;</dc:creator>
    </item>
<item>
        <title>8010f0ca - feat(cli,router): support src/app directory in Expo Router (#22748)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#8010f0ca</link>
        <description>feat(cli,router): support src/app directory in Expo Router (#22748)# Why- related https://github.com/expo/router/pull/629&lt;!--Please describe the motivation for this PR, and link to relevant GitHubissues, forums posts, or feature requests.--&gt;# How&lt;!--How did you build this feature or fix this bug and why?--&gt;# Test Plan&lt;!--Please describe how you tested this change and how a reviewer couldreproduce your test, especially if this PR does not include automatedtests! If possible, please also provide terminal output and/orscreenshots demonstrating your test/reproduction.--&gt;# Checklist&lt;!--Please check the appropriate items below if they apply to your diff.This is required for changes to Expo modules.--&gt;- [ ] Documentation is up to date to reflect these changes (eg:https://docs.expo.dev and README.md).- [ ] Conforms with the [Documentation Writing StyleGuide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)- [ ] This diff will work correctly for `npx expo prebuild` &amp; EAS Build(eg: updated a module plugin).---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Sat, 10 Jun 2023 05:48:57 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>9580591f - feat(metro-config, cli): CSS serializer (#22325)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#9580591f</link>
        <description>feat(metro-config, cli): CSS serializer (#22325)# WhyIn order to support static CSS in development mode, we need to updatethe metro serializer to support returning the JS and CSS assets. We nowinline the CSS in the HTML before sending to the client, this allows fortesting how the website works with JS disabled. We use the same styletag id to continue to support HMR for styles during subsequent updates.This change also refactors how exports work to serialize JS and CSS atthe same time (i.e. after the native transformations).&lt;!--Please describe the motivation for this PR, and link to relevant GitHubissues, forums posts, or feature requests.--&gt;# How&lt;!--How did you build this feature or fix this bug and why?--&gt;# Test Plan&lt;!--Please describe how you tested this change and how a reviewer couldreproduce your test, especially if this PR does not include automatedtests! If possible, please also provide terminal output and/orscreenshots demonstrating your test/reproduction.--&gt;# Checklist&lt;!--Please check the appropriate items below if they apply to your diff.This is required for changes to Expo modules.--&gt;- [ ] Documentation is up to date to reflect these changes (eg:https://docs.expo.dev and README.md).- [ ] Conforms with the [Documentation Writing StyleGuide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)- [ ] This diff will work correctly for `npx expo prebuild` &amp; EAS Build(eg: updated a module plugin).---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Sun, 30 Apr 2023 20:46:17 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>6a750d06 - feat(cli, metro-config): environment variable support (#21983)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#6a750d06</link>
        <description>feat(cli, metro-config): environment variable support (#21983)# Why- It&apos;s nice to be able to use uncommitted values in your app, based onthe environment. This feels very familiar to web developers.- Values that are prefixed with `EXPO_PUBLIC_` will be inlined in thebundle when bundling normally (e.g. not for Node.js).- `.env` files are loaded into memory and applied to the process duringa run. This also means that they&apos;re available in `app.config.js`.- During development-only, environment variables are exposed on the`process.env` object (non-enumerable) to ensure they&apos;re availablebetween fast refresh updates.&lt;!--Please describe the motivation for this PR, and link to relevant GitHubissues, forums posts, or feature requests.--&gt;# How- Create new package `@expo/env` which is used to hydrate env variablesin a unified way. I plan to open another PR in `eas-cli` which uses thispackage to fill in environment variables before uploading. NOTE:environment variables that are defined in eas.json are not available inExpo CLI when building locally, but are available in the cloud sincethey&apos;ll be on the process, this means they effectively emulate`.env.production`.- Update templates to gitignore local env files.- Add basic documentation to the versioned metro guide (more to come).&lt;!--How did you build this feature or fix this bug and why?--&gt;# Test Plan- [ ] E2E rendering test- [ ] E2E Node.js rendering test- [x] Unit tests for serializer- [x] Tests for env package&lt;!--Please describe how you tested this change and how a reviewer couldreproduce your test, especially if this PR does not include automatedtests! If possible, please also provide terminal output and/orscreenshots demonstrating your test/reproduction.--&gt;# Checklist&lt;!--Please check the appropriate items below if they apply to your diff.This is required for changes to Expo modules.--&gt;- [ ] Documentation is up to date to reflect these changes (eg:https://docs.expo.dev and README.md).- [ ] Conforms with the [Documentation Writing StyleGuide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)- [ ] This diff will work correctly for `expo prebuild` &amp; EAS Build (eg:updated a module plugin).

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Sat, 08 Apr 2023 03:37:17 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>81bb50eb - Fix main field resolution for metro web. (#21939)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#81bb50eb</link>
        <description>Fix main field resolution for metro web. (#21939)# Whyi broke the logic&lt;!--Please describe the motivation for this PR, and link to relevant GitHubissues, forums posts, or feature requests.--&gt;# How&lt;!--How did you build this feature or fix this bug and why?--&gt;# Test Plan&lt;!--Please describe how you tested this change and how a reviewer couldreproduce your test, especially if this PR does not include automatedtests! If possible, please also provide terminal output and/orscreenshots demonstrating your test/reproduction.--&gt;# Checklist&lt;!--Please check the appropriate items below if they apply to your diff.This is required for changes to Expo modules.--&gt;- [ ] Documentation is up to date to reflect these changes (eg:https://docs.expo.dev and README.md).- [ ] Conforms with the [Documentation Writing StyleGuide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)- [ ] This diff will work correctly for `expo prebuild` &amp; EAS Build (eg:updated a module plugin).---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Sat, 01 Apr 2023 18:29:14 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>f479be69 - chore(cli): switch `EXPO_USE_PATH_ALIASES` to `expo.experiments.tsconfigPaths`. (#21897)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#f479be69</link>
        <description>chore(cli): switch `EXPO_USE_PATH_ALIASES` to `expo.experiments.tsconfigPaths`. (#21897)# Why- It&apos;s a bit harder to set env vars and users will want this eitheralways on or always off.- Expo Config makes it easier to deprecate values on a per-versionbasis. https://github.com/expo/universe/pull/11872- Comment out references to the path aliases feature until we&apos;re closerto launch. Users are getting confused when they see the featuredocumented.---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Thu, 30 Mar 2023 03:10:43 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>57eba0f9 - feat(cli): add node target and externals to Metro (#21886)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#57eba0f9</link>
        <description>feat(cli): add node target and externals to Metro (#21886)# WhyIn order to bundle for Node.js targets using Metro (required for ReactServer Components and other features), we need to add support forleaving the Node.js imports in-tact (no first-class support), and theability to indicate that we&apos;re targeting Node.js without changing theplatform from web.&lt;!--Please describe the motivation for this PR, and link to relevant GitHubissues, forums posts, or feature requests.--&gt;# How- Use `resolver.environment` and `transform.environment` to partiallyinvalidate the Metro cache and pass custom options to the transformer(usage currently unimplemented) and resolver.- Tap Node.js files in the user project under`.expo/metro/externals/[module]/index.js` and redirect requests to thesemodules when bundling for Node.js environments.- Tap a polyfill which exposes `$$require_external` on the global.`$$require_external` can be used to access the environment require fromanywhere in the bundle.- `$$require_external` asserts when used in the browser or native (whereit shouldn&apos;t be available).&lt;!--How did you build this feature or fix this bug and why?--&gt;# Test Plan- Added unit tests.- Tested against an Expo Router project.&lt;!--Please describe how you tested this change and how a reviewer couldreproduce your test, especially if this PR does not include automatedtests! If possible, please also provide terminal output and/orscreenshots demonstrating your test/reproduction.--&gt;# Checklist&lt;!--Please check the appropriate items below if they apply to your diff.This is required for changes to Expo modules.--&gt;- [ ] Documentation is up to date to reflect these changes (eg:https://docs.expo.dev and README.md).- [ ] Conforms with the [Documentation Writing StyleGuide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)- [ ] This diff will work correctly for `expo prebuild` &amp; EAS Build (eg:updated a module plugin).---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Wed, 29 Mar 2023 22:27:23 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>0a6ddb20 - feat(cli): add basic static rendering for router projects (#21572)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#0a6ddb20</link>
        <description>feat(cli): add basic static rendering for router projects (#21572)# Why- Implement an experimental static rendering system for Metro websitesusing Expo Router.- Behavior is undocumented and highly experimental.&lt;!--Please describe the motivation for this PR, and link to relevant GitHubissues, forums posts, or feature requests.--&gt;# How- Add support to `start` and `export` which pre-renders static web pagesto HTML to improve SEO support on web.- The system implements [React Navigation&apos;sSSR](https://reactnavigation.org/docs/server-rendering) support.- Head elements can be used with `import { Head } from&apos;expo-router/head&apos;`.- The root HTML is not exposed to the user.- There are no data fetching mechanisms.- There&apos;s no ability to provide a 404 page or other server features.&lt;!--How did you build this feature or fix this bug and why?--&gt;# Test Plan- e2e test for exporting a router project statically.- `EXPO_USE_STATIC=1 yarn expo` -&gt; websites are pre-rendered beforebeing served.- `EXPO_USE_STATIC=1 yarn expo export -p web` -&gt; static routes arerendered to static HTML files by the same name (dynamic routes are notsupported).&lt;!--Please describe how you tested this change and how a reviewer couldreproduce your test, especially if this PR does not include automatedtests! If possible, please also provide terminal output and/orscreenshots demonstrating your test/reproduction.--&gt;# Checklist&lt;!--Please check the appropriate items below if they apply to your diff.This is required for changes to Expo modules.--&gt;- [ ] Documentation is up to date to reflect these changes (eg:https://docs.expo.dev and README.md).- [ ] Conforms with the [Documentation Writing StyleGuide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)- [ ] This diff will work correctly for `expo prebuild` &amp; EAS Build (eg:updated a module plugin).---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Mon, 13 Mar 2023 15:57:58 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>d8009c4b - feat(cli): add support for path aliases and absolute imports (#21262)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#d8009c4b</link>
        <description>feat(cli): add support for path aliases and absolute imports (#21262)# Why- In Expo Router, you have to import outside of the `app` directorywhich does not spark joy at scale (e.g. `../../../../../../`).- This is pretty standard functionality in web development, feels oddnot having it in our &quot;Metro for web&quot; system.&lt;!--Please describe the motivation for this PR, and link to relevant GitHubissues, forums posts, or feature requests.--&gt;# How- Add support for `compilerOptions.baseUrl` from `tsconfig.json` and`jsconfig.json` files to Metro. This enables absolute imports.- Add support for `compilerOptions.paths` aliases from `tsconfig.json`and `jsconfig.json` files to Metro. This enables path aliases. Tried tokeep the implementation as close to TypeScript as possible to reducemaintenance.- Absolute imports utilize built-in Metro behavior making it morereliable. We basically just register the baseUrl as a location to searchfor node modules.- Couldn&apos;t decide where to document the feature so I put it in multipleplaces.- We might need to update expo jest to have similar functionality in thefuture (it might already support these fields, didn&apos;t check).&lt;!--How did you build this feature or fix this bug and why?--&gt;# Test Plan- Added some unit tests for path aliases (non-exhaustive).- For correctness, you can use this feature in vscode and allautocomplete suggestions should work as the bundling now matches thebuilt-in resolution.&lt;!--Please describe how you tested this change and how a reviewer couldreproduce your test, especially if this PR does not include automatedtests! If possible, please also provide terminal output and/orscreenshots demonstrating your test/reproduction.--&gt;# Checklist&lt;!--Please check the appropriate items below if they apply to your diff.This is required for changes to Expo modules.--&gt;- [ ] Documentation is up to date to reflect these changes (eg:https://docs.expo.dev and README.md).- [ ] Conforms with the [Documentation Writing StyleGuide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)- [ ] This diff will work correctly for `expo prebuild` &amp; EAS Build (eg:updated a module plugin).---------Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Fri, 24 Feb 2023 18:20:14 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>96b83276 - fix(cli): add react-native-web alias for metro web that doesn&apos;t rely on Babel (#20828)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#96b83276</link>
        <description>fix(cli): add react-native-web alias for metro web that doesn&apos;t rely on Babel (#20828)# Why- If you disable Babel (e.g. in exotic mode) then the fallback systemdoesn&apos;t work (it effectively never &quot;works&quot;).# How- Simply remap `react-native` to `react-native-web` when resolving forthe web. &lt;!--How did you build this feature or fix this bug and why?--&gt;# Test Plan`EXPO_USE_EXOTIC=1 nexpo -c -w` -&gt; Works (never attempts to access`react-native/index.js`)Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Fri, 13 Jan 2023 16:00:18 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>837127ed - fix(cli): allow chained Metro resolvers to resolve when the predecessor resolvers throw a Metro resolution error. (#20704)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#837127ed</link>
        <description>fix(cli): allow chained Metro resolvers to resolve when the predecessor resolvers throw a Metro resolution error. (#20704)# WhyReimplements #19874 but with tests and proper checking.&lt;!--Please describe the motivation for this PR, and link to relevant GitHubissues, forums posts, or feature requests.--&gt;# How- When a metro resolver throws a metro resolution error, we shouldattempt to resolve using the next resolver in the chain.- Added debug logs so users can examine the progress.- Added tests for all known cases.Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Wed, 04 Jan 2023 16:26:21 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
<item>
        <title>bc774956 - Fix web assets not loading in Metro for web on Windows (#19935)</title>
        <link>http://172.16.0.5:8080/history/expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts#bc774956</link>
        <description>Fix web assets not loading in Metro for web on Windows (#19935)* Fix web assets not loading in Metro for web on Windows* Update packages/@expo/cli/CHANGELOG.mdCo-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;Co-authored-by: Expo Bot &lt;34669131+expo-bot@users.noreply.github.com&gt;

            List of files:
            /expo/packages/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts</description>
        <pubDate>Tue, 08 Nov 2022 20:30:36 +0000</pubDate>
        <dc:creator>Evan Bacon &lt;bacon@expo.io&gt;</dc:creator>
    </item>
</channel>
</rss>
