Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove 'import' from default Package Exports conditions #36584

Closed
wants to merge 1 commit into from
Closed

Remove 'import' from default Package Exports conditions #36584

wants to merge 1 commit into from

Commits on Mar 23, 2023

  1. Remove 'import' from default Package Exports conditions (#955)

    Summary:
    X-link: facebook/metro#955
    
    Pull Request resolved: #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:
        - 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: 1198de4e629e23f1c7a36e5d1d23d2013203d3db
    huntie authored and facebook-github-bot committed Mar 23, 2023
    Configuration menu
    Copy the full SHA
    7e7c2b2 View commit details
    Browse the repository at this point in the history