process: split execution entry points into main scripts
Note: there are some indentation changes in lib/internal/bootstrap/node.js
so please use https://github.com/nodejs/node/pull/25667/files?w=1 for reviews
process: split execution into main scripts
This patch splits the execution mode selection from the environment
setup in lib/internal/bootstrap/node.js
, and split the entry point
of different execution mode into main scripts under
lib/internal/main
:
-
check_syntax.js
: used when-c
/--check
which only checks the syntax of the input instead of executing it. -
eval_stdin.js
: used when-e
is passed without value and stdin is not a TTY (e.g. something is piped). -
eval_string
: used when-e
is passed along with a string argument -
inspect.js
: fornode inspect
/node debug
-
print_bash_completion.js
: for--completion-bash
-
print_help.js
: for--help
-
prof_process.js
: for--prof-process
-
repl.js
: for the REPL -
run_main_module.js
: used when a main module is passed -
run_third_party_main.js
: for the legacy_third_party_main.js
support -
worker_thread.js
: for workers
This makes the entry points easier to navigate and paves the way for customized v8 snapshots (that do not need to deserialize execution mode setup) and better embedder APIs.
As an example, after this patch, for the most common case where Node.js executes a user module as an entry point, it essentially goes through:
-
lib/internal/per_context.js
to setup the v8 Context (which is also run when setting up contexts for thevm
module) -
lib/internal/bootstrap/loaders.js
to set up internal binding and builtin module loaders (that are separate from the loaders accessible in the user land). -
lib/internal/bootstrap/node.js
: to set up the rest of the environment, including various globals and the process object -
lib/internal/main/run_main_module.js
: which is selected from C++ to prepare execution of the user module.
This patch also removes NativeModuleLoader::CompileAndCall
and
exposes NativeModuleLoader::LookupAndCompile
directly so that
we can handle syntax errors and runtime errors of bootstrap
scripts differently.
worker: move worker thread setup code into the main script
This patch directly inlines createMessageHandler()
and
createWorkerFatalExeception()
in the new
lib/internal/main/worker_thread.js
since the implementation
of the two methods are related to the execution flow of
workers.
Checklist
-
make -j4 test
(UNIX), orvcbuild test
(Windows) passes -
tests and/or benchmarks are included -
documentation is changed or added -
commit message follows commit guidelines