add support for "module", "production", and "development" package exports conditionals #1854
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Sometimes library authors like to ship both a "development" and "production" version of their libraries. Typically, the development version has more robust error handling and more complete developer tools while the production version is optimized for small bundle size.
In order to accomplish this, packages typically have an entrypoint that looks something like this:
This works great for cjs based environments because it allows conditional code importing. This doesn't work so well for esm based environments which requires the import statements to be at the top level.
To help solve these and other related issues, a convention has been created for "package exports conditionals" where the
exports
field in the package json describe the conditions in which a certain file should be imported.While esbuild has basic support for package exports conditions (thanks btw!), this PR extends the default support to support a few other common cases:
production
anddevelopment
conditions baed onNODE_ENV
conventionimports
condition synonymous withmodule
.