-
-
Notifications
You must be signed in to change notification settings - Fork 543
Description
Right now, if you fork() a ts-node process, the child gets the ts-node bin entrypoint and the same flags passed to ts-node: --project, etc. Yet if you've launched with --esm, then the child receives a pre-packed brotli payload of parsed configuration & bootstrapping information.
Without brotli, child process re-loads tsconfig, re-does all config work
With brotli, some / most of config loading is already done and baked into the brotli payload
Should these 2 codepaths be unified? So that we always put the brotli payload in execArgv?
Once we have fully completed bootstrapping and config parsing, we can re-pack the brotli payload and put it in execArgv.
Pros
- prevents subsequent child processes from repeating any of that config work
- skip loading certain deps
- skip loading TS compiler entirely if using SWC?
- children are forced to use the same tsconfig and flags even if they're spawned in a different working directory
- probably a good thing for simplicity
- opens the door for future work where children talk to the same language service in external process perhaps?
Cons
- breaks rare cases where child_processes are expected to re-discover tsconfig
- these cases can be accomplished by scrubbing the execArgv / re-spawning ts-node CLI using cross-spawn or similar
Other notes
Will only happen in our bin.ts bootstrapping; not --loader nor register() codepaths, since the latter do not control the node process' startup.