Skip to content

Commit 0026f73

Browse files
huntieRiccardo Cipolleschi
authored and
Riccardo Cipolleschi
committed
Remove 'import' from default Package Exports conditions (microsoft#955)
Summary: X-link: facebook/metro#955 Pull Request resolved: facebook#36584 Changelog: [General][Changed] - Default condition set for experimental Package Exports is now `['require', 'react-native']` The [Exports RFC](https://github.com/react-native-community/discussions-and-proposals/blob/main/proposals/0534-metro-package-exports-support.md) had assumed that supporting the `"import"` condition was a syntax-only difference, given we are not in a Node.js environment — and so was worthwhile to support for maximal ecosystem compatibility. {F915841105} This assumption is similar to [`--moduleResolution bundler` in TypeScript 5.0](microsoft/TypeScript#51669): > bundlers and runtimes that include a range of Node-like resolution features and ESM syntax, but do not enforce the strict resolution rules that accompany ES modules in Node or in the browser > -- microsoft/TypeScript#51669 (comment) However, robhogan has rightly pointed out that **we should not do this!** - ESM (once transpiled) is **not** simply a stricter subset of in-scope features supported by CJS. For example, it supports top-level async, which would be breaking at runtime. - We recently made the same change for our Jest environment: - facebook@681d7f8 As such, we are erring on the side of correctness and supporting only `['require', 'react-native']` in our defaults. At runtime, all code run by React Native is anticipated to be CommonJS. `"exports"` will instead allow React Native to correctly select the CommonJS versions of modules from all npm packages. Metro changelog: [Experimental] Package Exports `unstable_conditionNames` now defaults to `['require']` Reviewed By: robhogan Differential Revision: D44303559 fbshipit-source-id: 0077e547e7775e53d1e4e9c3a9d01347f4fb7d4a
1 parent 392a843 commit 0026f73

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

packages/metro-config/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ function getDefaultConfig(
4242
resolver: {
4343
resolverMainFields: ['react-native', 'browser', 'main'],
4444
platforms: ['android', 'ios'],
45-
unstable_conditionNames: ['import', 'require', 'react-native'],
45+
unstable_conditionNames: ['require', 'react-native'],
4646
},
4747
serializer: {
4848
getPolyfills: () => require('@react-native/js-polyfills')(),

0 commit comments

Comments
 (0)