Skip to content

src: add detailed embedder process initialization API

So far, process initialization has been a bit all over the place in Node.js. InitializeNodeWithArgs() is our main public API for this, but inclusion of items in it vs. InitializeOncePerProcess() and PlatformInit() has been random at best. Likewise, some pieces of initialization have been guarded by NODE_SHARED_MODE, but also fairly randomly and without any meaningful connection to shared library usage.

This leaves embedders in a position to cherry-pick some of the initialization code into their own code to make their application behave like typical Node.js applications to the degree to which they desire it.

Electron takes an alternative route and makes direct use of InitializeOncePerProcess() already while it is a private API, with a TODO to add it to the public API in Node.js.

This commit addresses that TODO, and TODOs around the NODE_SHARED_MODE usage. Specifically:

  • InitializeOncePerProcess() and TearDownOncePerProcess() are added to the public API.
  • The flags option of these functions are merged with the flags option for InitializeNodeWithArgs(), since they essentially share the same semantics.
  • The return value of the function is made an abstract class, rather than a struct, for easier API/ABI stability.
  • Initialization code from main() is brought into these functions (since that makes sense in general).
  • Add a TODO for turning InitializeNodeWithArgs() into a small wrapper around InitializeOncePerProcess() and eventually removing it (at least one major release cycle each, presumably).
  • Remove NODE_SHARED_MODE guards and replace them with runtime options.

Merge request reports

Loading