-
Notifications
You must be signed in to change notification settings - Fork 30k
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
package.exports: false is not working with module loader #32107
Comments
I'm getting the same error after updating to v13.10.1 so I switched back to LTS v12.16.1 and the error gone. |
I fixed this issue by removing the |
I am able to confirm that @BassemN 's advice of removing |
/cc @nodejs/modules |
The exports field value should always be unconditionally passed into |
I've got a patch to revert to the behavior documented in the README. It is not clear to me if this was intended / desired behavior change... but I am assuming it is not as the docs were not updated. I'll open a PR and we can discuss it. |
There was a recent change by @jkrems or @guybedford to stop unintended falling back to |
it seems like behavior has changed for both My original patch doesn't work as it is supposed to unfortunately although the tests I wrote can likely be resused. I found a way to make "false" work, but it completely skips all the exports checks and there is also no support for |
for us this was explicitly triggered by babel 7.8.3 - the exports:false was here: https://github.com/babel/babel/blob/v7.8.3/packages/babel-helper-compilation-targets/package.json upgrading to 7.8.7 appears to resolve it |
The semantics of I think this is actually a docs issue, since I've created a docs update in 74206e7 to remove reference to the "exports": false case, and rather encourage using the exports main always as the pattern here. I think that would make sense as guidance to always encourage setting the exports main as in this docs update. Thanks for posting @JLHwung this is definitely a confusion that would be good to fix. |
@guybedford when did we discuss changing it? As i recall, it’s supposed to always be passed into Object.keys when it’s non-nullish, making false and true and |
Yes all non null values *are* equivalent. But it will not revert to the
main in all those cases since we made exports a primary definition of the
main entry point hence the error.
…On Fri, Mar 6, 2020 at 18:55 Jordan Harband ***@***.***> wrote:
@guybedford <https://github.com/guybedford> when did we discuss changing
it? As i recall, it’s supposed to always be passed into Object.keys when
it’s non-nullish, making false and true and {} equivalent.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#32107?email_source=notifications&email_token=AAESFSQEBHRKF3PKPR3SABTRGETIPA5CNFSM4LCOFUK2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEOCBYRY#issuecomment-595860551>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAESFSQPSI4Y73E37KO5OZLRGETIPANCNFSM4LCOFUKQ>
.
|
This is the fix, I used node13-alpine in the docker file, because of that i was getting this error. Now i fixed to 12.6.1 and error is gone. (althought i upgraded babel to latest ) |
There is a Babel bug here that was fixed in a patch. See https://github.com/babel/babel/pull/11006/files. |
That patch is supposed to offer backward compatibility: At that moment |
To support those node versions, you need to use an array, so the object form can fall back to the string form. |
I think in this case, it's enough to just use the string form. The current value: "main": "lib/index.js",
"exports": {
".": "./lib/index.js"
}, Could also be written as: "main": "lib/index.js",
"exports": "./lib/index.js", |
This worked for me too - I moved back to the LTS (12.6.1) version on my Ubuntu install via this command sudo n stable |
I ran into this upon upgrading to node 12.6.3 from 10.20.1, just wanted to mention that this definitely resolves my case. I also want to mention for others possibly running @babel/register for server side compilation to ensure it is also upgraded to match otherwise you will continue to get the same error for the server side compilation step. I forgot I even had it which seems to always be the case once something works for a long time 😄. |
There's a bug in nodejs: nodejs/node#32107 that prevents babel 7.8.3 from working in node 13.10+ Te workaround was added in 7.8.4
* chore: switch to eslint rules * chore: update babel There's a bug in nodejs: nodejs/node#32107 that prevents babel 7.8.3 from working in node 13.10+ Te workaround was added in 7.8.4 * chore: ingore pkg directory from linting * chore: include `stories` in tsconfig * chore: prettier on files that haven't been linted before * chore: use jest.fn for mocks * chore: no unused vars * chore: not needed escape * chore: prototype method call * chore: disable require rule * chore: disable prefer rest This is a 3rd part intercom snippet. * chore: switch to slint comment * fix: no implicit any * chore: disable naming convention rule * chore: remove legacy ts-lint comments * chore: pass input type * chore: bump lint rules
Just adding that I get this issue with node versions 12.18.0 and 12.17.0 but it does not reproduce with node version 12.16.3. Platform: |
You don't want to ever use it. To give some background here for those interested, in an early iteration of the Any packages published with this pattern are shipping a bug, so you likely want to upgrade any dependency that is using this There should be enough information in this thread for anyone hitting this issue, closing this as a non-bug. |
This is a bug in babel: babel/babel#11216 It is closed but points to an issue in node: nodejs/node#32107 The issue in node is closed as not an issue, so it seems as though babel needs to fix. Also, check that build works in PRs.
This is a bug in babel: babel/babel#11216 It is closed but points to an issue in node: nodejs/node#32107 The issue in node is closed as not an issue, so it seems as though babel needs to fix. Also, check that build works in PRs.
Because of this hint I switched from LTS v12.18.2 to LTS v12.16.1 and got this resolved. As far as I can read babel has referred to the Node community to resolve this. |
@BirgitPohl I think the babel package is fixed in the latest version (https://github.com/babel/babel/blob/7fd40d86a0d03ff0e9c3ea16b29689945433d4df/packages/babel-helper-compilation-targets/package.json#L13-L15) - or at least should be. If this happens with a different package, it may require a similar fix to its |
If this version of the Babel helper continues to cause problems one approach might be to land supporting non-object exports as being warnings while behaving as if exports does not exist. |
…ud-lib-install-error fix for nodejs/node#32107
See nodejs/node#32107 (comment) This breaks the module loader on versions newer than node 12.16.x
See nodejs/node#32107 (comment) This breaks the module loader on versions newer than node 12.16.x
See nodejs/node#32107 (comment) This breaks the module loader on versions newer than node 12.16.x
Edits:
If you come here via search engine and
@babel/*
complaints such errors after you upgraded to node.js 12.17.0 or 13.10.0, please update@babel/helper-compilation-targets
to latest version.If you are not using babel directly, please update your build infra (
react-scripts
,vue-cli
and others to name) to latest version. If they doesn't work, the last resort is to remove your package lockfiles and re-install.--- Original Post ---
What steps will reproduce the bug?
foo
, withpackage.json
astest.js
.How often does it reproduce? Is there a required condition?
Must reproduce
What is the expected behavior?
It should load successfully according to the docs
What do you see instead?
It throws
Additional information
exports: {}
also throws.exports: null
looks good to me but it is undocumented.The issue is firstly reported in babel/babel#11216, we had changed
exports: false
toexports: { ".": "./lib/index.js" }
for backward compatibility to Node.js 13.0-13.1. But I don't expectexports: false
will break on Node.js 13.10I am not familiar with ES modules spec. So if this behaviour is intended, please update the docs.
The text was updated successfully, but these errors were encountered: