(fix): respect tsconfig esModuleInterop flag#327
Merged
jaredpalmer merged 1 commit intojaredpalmer:masterfrom Dec 13, 2019
Merged
(fix): respect tsconfig esModuleInterop flag#327jaredpalmer merged 1 commit intojaredpalmer:masterfrom
jaredpalmer merged 1 commit intojaredpalmer:masterfrom
Conversation
- the previous assumption that ESM users will always import the ESM
build doesn't actually hold up in practice due to various limitations
in Node and testing and the prevalence of transpiling in general
- even if one uses mostly ESM, many tools will require and use
the CJS build, and this option would break compatibility
- without esModule set, CJS users would be unable to use the default
export of any library built with tsdx
- and this was not documented, meaning it would cause unintended
breaking changes in libraries that use default exports and try to
adopt tsdx
- it would also break compatibility with certain tooling
- so, instead of always setting rollup's esModule to false and
potentially causing unintended consequences, respect the user's
esModuleInterop config as set in their tsconfig, but default to
false
13bd5ab to
838e447
Compare
This was referenced Nov 14, 2019
Owner
|
@benlesh does this solve your issue? |
This was referenced Dec 4, 2019
Collaborator
Author
|
@jaredpalmer it's been almost a month since I made this PR to fix the well-upvoted default export bug (#165), what can we do to get this merged? I'm currently running a fork of |
sebald
added a commit
to sebald/tsdx
that referenced
this pull request
Dec 19, 2019
* master: (26 commits) (deps/lint): upgrade @typescript-eslint to support ?. and ?? (jaredpalmer#377) (ci): add a lint job so PRs will require passing lint (jaredpalmer#378) (clean): remove .rts_cache_* from storybook gitignore (jaredpalmer#375) Add optional chaining and nullish coalescing operators support (jaredpalmer#370) Added Storybook template (jaredpalmer#318) (fix/ci): GitHub Actions should run on PRs as well (fix/format): formatting of jaredpalmer#366 didn't pass lint Add prepare script to generated project (jaredpalmer#334) default jest to watch mode when not in CI (jaredpalmer#366) (fix): respect tsconfig esModuleInterop flag (jaredpalmer#327) fix: minor typo update rollup deps and plugins update to ts 3.7 Remove unnecessary yarn install command in GH action update README.md update README.md Use node_modules/.cache/... as cacheRoot (jaredpalmer#329) fix(lint): Only default to src test if they exist (jaredpalmer#344) Fix error when providing babel/preset-env without options (jaredpalmer#350) Replaced some sync methods for their async version ...
This was referenced Jan 29, 2020
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
the previous assumption that ESM users will always import the ESM
build doesn't actually hold up in practice due to various limitations
in Node and testing and the prevalence of transpiling in general
the CJS build, and this option would break compatibility
without esModule set, CJS users would be unable to use the default
export of any library built with tsdx
breaking changes in libraries that use default exports and try to
adopt tsdx
so, instead of always setting rollup's esModule to false and
potentially causing unintended consequences, respect the user's
esModuleInterop config as set in their tsconfig, but default to
false
Fixes #165 according to my suggestion in #165 (comment) . Mine and other folk's comments in that issue give more details about the compatibility and adoption issues that drive this PR. Ultimately, I believe this is a bugfix as the current behavior causes unintended consequences and because default exports are already output, just not with
__esModulein CJS builds.Have tested this successfully locally. All it does is, if
esModuleInteropis set totrueintsconfig.json, will add a line of code to the CJS output as such:As I mentioned in #165 (comment), everything else is the same as before, as ESM builds already output
export defaultand CJS builds already outputexports.default.__esModuleis just a hint for transpilers to use.defaultwhen transpiling default imports to CJS.