Joyee Cheung
@joyeecheung.bsky.social
2.3K followers 300 following 680 posts
She/her. I contribute to Node.js and V8. I post about museums, food, plants and other stuff too. https://github.com/joyeecheung
Posts Media Videos Starter Packs
joyeecheung.bsky.social
No particular reason other than it seems a bit more common when I skim over the common shipping patterns
Reposted by Joyee Cheung
nordicjs.com
No more juggling CommonJS and faux-ESM. @joyeecheung.bsky.social revealed how Node.js is moving to full ESM and why the future looks brighter for developers. #NordicJS #NordicJS2025
joyeecheung.bsky.social
I gave a talk today at @nordicjs.com about shipping Node.js packages in 2025...or how to transition from shipping dual/faux-ESM/CommonJS to shipping ESM directly!

Slides at github.com/joyeecheung/...
github.com
Reposted by Joyee Cheung
igalia.com
Igalia's @joyeecheung.bsky.social will be speaking about "Shipping Node.js packages in 2025,” focused on migrating dual/faux/CJS packages to ESM-only at Nordic.js on Friday, 3rd October at 10:30 CEST

nordicjs.com/2025/speaker...

Come say hi!
The same details as the skeet but on a card with Joyee's avatar
joyeecheung.bsky.social
Whenever I travel to a place where dinner starts at normal time I always feel that I've gained at least 3 extra hours per day and there are actually things I can do at night again
joyeecheung.bsky.social
But that example is pretty extreme, not every CJS exports thousands of names
joyeecheung.bsky.social
…or some heuristics can be used to assume .js in node_modules governed by the same package.json have the same format so that they don’t need to be repeatedly parsed
joyeecheung.bsky.social
The issue can be alleviated if more packages explicitly specify the type field; or if the toolchains can reuse the parsed result (e.g. for detecting exports) they could reuse it and not just throw it away after syntax detection.
joyeecheung.bsky.social
That is pretty much what Node.js does, except that Node.js does reuse the parsed result because it actually needs to parse it and run it anyway. It warns against results it cannot reuse though (ESM in .js under node_modules without “type” field in package.json).
joyeecheung.bsky.social
I noticed, but my connection to GitHub at home has always been slow no matter it’s match day or not 😬
joyeecheung.bsky.social
Me: why is it taking forever to git clone when I am trying to build a docker container, what's wrong with my docker configuration

(a few moments later)

Oh I forgot I am doing it a home where the connection to GitHub is just outrageously slow 😭 the wrong is in my provider
joyeecheung.bsky.social
Yeah it would be odd to say Node.js resent ESM when folks are actively making it less painful to use / ship. At most, there are still wonky edge cases because of technicalities, but bugs always show up when you try to get two very different semantics work together no matter you love them or not.
joyeecheung.bsky.social
If there's some enterprise value not represented in a project mostly built by volunteers, the most probable reason is just: no enterprise is investing in the work about this, or not enough. Then it is unlikely to get done by unpaid volunteers in their spare time until investment comes.
joyeecheung.bsky.social
Sometimes it's just "people making wishes that won't get done by itself". For example built-in HTTP proxy and system CA support are important for many enterprise users and requested for years, but only added recently because the companies I and another contributor work for are funding the work.
joyeecheung.bsky.social
Node.js maintainers come and go; most people active in 2017 are inactive in 2025, and different people have very different views. There isn't a single person or a team who can speak to the value of the project, it's mostly "if you don't like it, submit a PR and convince the people currently around"
joyeecheung.bsky.social
I tried not to look at GitHub on this special day and I failed already during breakfast....🥲

I blame this breakfast for taking too long to serve and I got bored!
An afternoon tea style breakfast.
joyeecheung.bsky.social
Landed the configurations as "execArgv" and "execArgvExtension" ("none" | "env" | "cli"), expected to go out in v24.7.0!

github.com/nodejs/node/...
github.com/nodejs/node/...
joyeecheung.bsky.social
Got two PRs to my fork of Node.js with AI generated nonsense in the past two weeks 🤨 I get that AI spam is common these days but why my fork?
joyeecheung.bsky.social
o.O It includes China (with a contestant that I might have seen on TV before)
joyeecheung.bsky.social
Haven't tried to generate core dumps on macOS for a local build for quite some time and just found out that the executable now must be signed with com.apple.security.get-task-allow entitlement to be dumped nasa.github.io/trick/howto_...
How to Dump a Core File on MacOS (Monterey 12.5)
Trick Simulation Environment. Trick provides a common set of simulation capabilities and utilities to build simulations automatically.
nasa.github.io
joyeecheung.bsky.social
Or if you are looking into converting other profiles to load in pprof’s visualisations….perhaps www.kvakil.me/posts/2022-0... still works
Converting NodeJS CPU profiles to pprof
www.kvakil.me
joyeecheung.bsky.social
RFC: We are adding support for execution command line flag in Node.js single-executable applications. What do you think about this configuration?

github.com/nodejs/node/...
"execArgv" field in the SEA config specifies execution flags to be baked into the SEA and applied when it's launched. "execArgvMode" field specifies whether run-time override is allowed. "sealed" for no override, "env" for allowing override from NODE_OPTIONS, and perhaps another value for more powerful override like `--node-flags="--inspect"`.