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

Update README to instruct how to alias the native one (due to Node 22 annoying warning) #137

Open
agalatan opened this issue Sep 4, 2024 · 4 comments

Comments

@agalatan
Copy link

agalatan commented Sep 4, 2024

  • Node 22 will start showing warnings that punycode is deprecated, and a userland solution must be used
  • Lots of 3rd party node_modules use native punycode and many are out of our control. It's too many. Especially because node-fetch depends on punycode, and even if this itself is now native .... we all know what a chaos is in node_modules.
  • Anyway, what I did, was to install module-alias and then add before anything else (node -r or via NODE_OPTIONS):
const moduleAlias = require('module-alias');
moduleAlias.addAlias('punycode', 'punycode/');

And it works.
I recommend adding this in the README. I can do it, if I know you will accept it.

@mathiasbynens
Copy link
Owner

Nowadays we publish the package both as punycode and as punycode.js — so the simpler solution is to npm install punycode.js and require('punycode.js') instead. I’d welcome a README patch that mentions these options!

@agalatan
Copy link
Author

agalatan commented Sep 4, 2024

You can't in 3rd party modules, that are deep inside your node_modules, that's my point. You have very little control on the require. And there's plenty of them.

node-fetch brings whatwg-url which:

(node:4994) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
    at node:punycode:3:9
    at BuiltinModule.compileForInternalLoader (node:internal/bootstrap/realm:399:7)
    at BuiltinModule.compileForPublicLoader (node:internal/bootstrap/realm:338:10)
    at loadBuiltinModule (node:internal/modules/helpers:108:7)
    at Function.Module._load (node:internal/modules/cjs/loader:1099:17)
    at TracingChannel.traceSync (node:diagnostics_channel:315:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:217:24)
    at Module.require (node:internal/modules/cjs/loader:1339:12)
    at require (node:internal/modules/helpers:135:16)
    at Object.<anonymous> (/Users/alingalatan/workspaces/apap/node_modules/node-fetch/node_modules/whatwg-url/lib/url-state-machine.js:2:18)

Say you got rid of node-fetch:

(node:5235) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
    at node:punycode:3:9
    at BuiltinModule.compileForInternalLoader (node:internal/bootstrap/realm:399:7)
    at BuiltinModule.compileForPublicLoader (node:internal/bootstrap/realm:338:10)
    at loadBuiltinModule (node:internal/modules/helpers:108:7)
    at Function.Module._load (node:internal/modules/cjs/loader:1099:17)
    at TracingChannel.traceSync (node:diagnostics_channel:315:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:217:24)
    at Module.require (node:internal/modules/cjs/loader:1339:12)
    at require (node:internal/modules/helpers:135:16)
    at Object.<anonymous> (/Users/alingalatan/workspaces/apap/node_modules/tr46/index.js:3:16)

Now it's tr46

It just keeps going. punycode is present in many node_modules, some not very maintained.

@service-inspectech
Copy link

Seriously good grief, who started this insanity? Getting this deprecation warning removed is near impossible from the amount of usage.

@agalatan
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants