Node.js v20.19.5 documentation
- Node.js v20.19.5
-
Table of contents
- Command-line API
- Synopsis
- Program entry point
- Options
-
--
--abort-on-uncaught-exception
--allow-addons
--allow-child-process
--allow-fs-read
--allow-fs-write
--allow-wasi
--allow-worker
--build-snapshot
--build-snapshot-config
-c
,--check
--completion-bash
-C condition
,--conditions=condition
--cpu-prof
--cpu-prof-dir
--cpu-prof-interval
--cpu-prof-name
--diagnostic-dir=directory
--disable-warning=code-or-type
--disable-wasm-trap-handler
--disable-proto=mode
--disallow-code-generation-from-strings
--expose-gc
--dns-result-order=order
--enable-fips
--enable-source-maps
--env-file=config
-e
,--eval "script"
--experimental-default-type=type
--experimental-eventsource
--experimental-import-meta-resolve
--experimental-loader=module
--experimental-network-imports
--experimental-network-inspection
--experimental-permission
--experimental-policy
--experimental-require-module
--experimental-sea-config
--experimental-shadow-realm
--experimental-test-coverage
--experimental-test-module-mocks
--experimental-vm-modules
--experimental-wasi-unstable-preview1
--experimental-wasm-modules
--experimental-websocket
--force-context-aware
--force-fips
--force-node-api-uncaught-exceptions-policy
--frozen-intrinsics
--heap-prof
--heap-prof-dir
--heap-prof-interval
--heap-prof-name
--heapsnapshot-near-heap-limit=max_count
--heapsnapshot-signal=signal
-h
,--help
--icu-data-dir=file
--import=module
--input-type=type
--insecure-http-parser
--inspect[=[host:]port]
--inspect-brk[=[host:]port]
--inspect-port=[host:]port
--inspect-publish-uid=stderr,http
--inspect-wait[=[host:]port]
-i
,--interactive
--jitless
--max-http-header-size=size
--napi-modules
--network-family-autoselection-attempt-timeout
--no-addons
--no-deprecation
--no-experimental-detect-module
--no-experimental-fetch
--no-experimental-global-customevent
--no-experimental-global-webcrypto
--no-experimental-repl-await
--no-experimental-require-module
--no-extra-info-on-fatal-exception
--no-force-async-hooks-checks
--no-global-search-paths
--no-network-family-autoselection
--no-warnings
--node-memory-debug
--openssl-config=file
--openssl-legacy-provider
--openssl-shared-config
--env-file-if-exists=config
--pending-deprecation
--policy-integrity=sri
--preserve-symlinks
--preserve-symlinks-main
-p
,--print "script"
--experimental-print-required-tla
--prof
--prof-process
--redirect-warnings=file
--report-compact
--report-dir=directory
,report-directory=directory
--report-filename=filename
--report-on-fatalerror
--report-on-signal
--report-signal=signal
--report-uncaught-exception
--report-exclude-network
-r
,--require module
--secure-heap=n
--secure-heap-min=n
--snapshot-blob=path
--test
--test-concurrency
--test-coverage-exclude
--test-coverage-include
--test-force-exit
--test-name-pattern
--test-only
--test-reporter
--test-reporter-destination
--test-shard
--test-timeout
--throw-deprecation
--title=title
--tls-cipher-list=list
--tls-keylog=file
--tls-max-v1.2
--tls-max-v1.3
--tls-min-v1.0
--tls-min-v1.1
--tls-min-v1.2
--tls-min-v1.3
--trace-atomics-wait
--trace-deprecation
--trace-event-categories
--trace-event-file-pattern
--trace-events-enabled
--trace-exit
--trace-require-module=mode
--trace-sigint
--trace-sync-io
--trace-tls
--trace-uncaught
--trace-warnings
--track-heap-objects
--unhandled-rejections=mode
--use-bundled-ca
,--use-openssl-ca
--use-largepages=mode
--v8-options
--v8-pool-size=num
-v
,--version
--watch
--watch-path
--watch-preserve-output
--zero-fill-buffers
- Environment variables
FORCE_COLOR=[1, 2, 3]
NO_COLOR=<any>
NODE_DEBUG=module[,…]
NODE_DEBUG_NATIVE=module[,…]
NODE_DISABLE_COLORS=1
NODE_EXTRA_CA_CERTS=file
NODE_ICU_DATA=file
NODE_NO_WARNINGS=1
NODE_OPTIONS=options...
NODE_PATH=path[:…]
NODE_PENDING_DEPRECATION=1
NODE_PENDING_PIPE_INSTANCES=instances
NODE_PRESERVE_SYMLINKS=1
NODE_REDIRECT_WARNINGS=file
NODE_REPL_EXTERNAL_MODULE=file
NODE_REPL_HISTORY=file
NODE_SKIP_PLATFORM_CHECK=value
NODE_TEST_CONTEXT=value
NODE_TLS_REJECT_UNAUTHORIZED=value
NODE_V8_COVERAGE=dir
OPENSSL_CONF=file
SSL_CERT_DIR=dir
SSL_CERT_FILE=file
TZ
UV_THREADPOOL_SIZE=size
UV_USE_IO_URING=value
- Useful V8 options
--abort-on-uncaught-exception
--disallow-code-generation-from-strings
--enable-etw-stack-walking
--expose-gc
--harmony-shadow-realm
--huge-max-old-generation-size
--jitless
--interpreted-frames-native-stack
--prof
--perf-basic-prof
--perf-basic-prof-only-functions
--perf-prof
--perf-prof-unwinding-info
--max-old-space-size=SIZE
(in MiB)--max-semi-space-size=SIZE
(in MiB)--security-revert
--stack-trace-limit=limit
- Command-line API
-
Index
- Assertion testing
- Asynchronous context tracking
- Async hooks
- Buffer
- C++ addons
- C/C++ addons with Node-API
- C++ embedder API
- Child processes
- Cluster
- Command-line options
- Console
- Corepack
- Crypto
- Debugger
- Deprecated APIs
- Diagnostics Channel
- DNS
- Domain
- Errors
- Events
- File system
- Globals
- HTTP
- HTTP/2
- HTTPS
- Inspector
- Internationalization
- Modules: CommonJS modules
- Modules: ECMAScript modules
- Modules:
node:module
API - Modules: Packages
- Net
- OS
- Path
- Performance hooks
- Permissions
- Process
- Punycode
- Query strings
- Readline
- REPL
- Report
- Single executable applications
- Stream
- String decoder
- Test runner
- Timers
- TLS/SSL
- Trace events
- TTY
- UDP/datagram
- URL
- Utilities
- V8
- VM
- WASI
- Web Crypto API
- Web Streams API
- Worker threads
- Zlib
- Other versions
- Options
Command-line API#
Node.js comes with a variety of CLI options. These options expose built-in debugging, multiple ways to execute scripts, and other helpful runtime options.
To view this documentation as a manual page in a terminal, run man node
.
Synopsis#
node [options] [V8 options] [<program-entry-point> | -e "script" | -] [--] [arguments]
node inspect [<program-entry-point> | -e "script" | <host>:<port>] …
node --v8-options
Execute without arguments to start the REPL.
For more info about node inspect
, see the debugger documentation.
Program entry point#
The program entry point is a specifier-like string. If the string is not an
absolute path, it's resolved as a relative path from the current working
directory. That path is then resolved by CommonJS module loader, or by the
ES module loader if --experimental-default-type=module
is passed. If no corresponding file is found, an error is thrown.
If a file is found, its path will be passed to the ES module loader under any of the following conditions:
- The program was started with a command-line flag that forces the entry
point to be loaded with ECMAScript module loader, such as
--import
or--experimental-default-type=module
. - The file has an
.mjs
extension. - The file does not have a
.cjs
extension, and the nearest parentpackage.json
file contains a top-level"type"
field with a value of"module"
.
Otherwise, the file is loaded using the CommonJS module loader. See Modules loaders for more details.
ECMAScript modules loader entry point caveat#
When loading, the ES module loader loads the program
entry point, the node
command will accept as input only files with .js
,
.mjs
, or .cjs
extensions; with .wasm
extensions when
--experimental-wasm-modules
is enabled; and with no extension when
--experimental-default-type=module
is passed.
Options#
All options, including V8 options, allow words to be separated by both
dashes (-
) or underscores (_
). For example, --pending-deprecation
is
equivalent to --pending_deprecation
.
If an option that takes a single value (such as --max-http-header-size
) is
passed more than once, then the last passed value is used. Options from the
command line take precedence over options passed through the NODE_OPTIONS
environment variable.
-
#
Alias for stdin. Analogous to the use of -
in other command-line utilities,
meaning that the script is read from stdin, and the rest of the options
are passed to that script.
--
#
Indicate the end of node options. Pass the rest of the arguments to the script. If no script filename or eval/print script is supplied prior to this, then the next argument is used as a script filename.
--abort-on-uncaught-exception
#
Aborting instead of exiting causes a core file to be generated for post-mortem
analysis using a debugger (such as lldb
, gdb
, and mdb
).
If this flag is passed, the behavior can still be set to not abort through
process.setUncaughtExceptionCaptureCallback()
(and through usage of the
node:domain
module that uses it).
--allow-addons
#
When using the Permission Model, the process will not be able to use
native addons by default.
Attempts to do so will throw an ERR_DLOPEN_DISABLED
unless the
user explicitly passes the --allow-addons
flag when starting Node.js.
Example:
// Attempt to require an native addon
require('nodejs-addon-example');
$ node --experimental-permission --allow-fs-read=* index.js
node:internal/modules/cjs/loader:1319
return process.dlopen(module, path.toNamespacedPath(filename));
^
Error: Cannot load native addon because loading addons is disabled.
at Module._extensions..node (node:internal/modules/cjs/loader:1319:18)
at Module.load (node:internal/modules/cjs/loader:1091:32)
at Module._load (node:internal/modules/cjs/loader:938:12)
at Module.require (node:internal/modules/cjs/loader:1115:19)
at require (node:internal/modules/helpers:130:18)
at Object.<anonymous> (/home/index.js:1:15)
at Module._compile (node:internal/modules/cjs/loader:1233:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1287:10)
at Module.load (node:internal/modules/cjs/loader:1091:32)
at Module._load (node:internal/modules/cjs/loader:938:12) {
code: 'ERR_DLOPEN_DISABLED'
}
--allow-child-process
#
When using the Permission Model, the process will not be able to spawn any
child process by default.
Attempts to do so will throw an ERR_ACCESS_DENIED
unless the
user explicitly passes the --allow-child-process
flag when starting Node.js.
Example:
const childProcess = require('node:child_process');
// Attempt to bypass the permission
childProcess.spawn('node', ['-e', 'require("fs").writeFileSync("/new-file", "example")']);
$ node --experimental-permission --allow-fs-read=* index.js
node:internal/child_process:388
const err = this._handle.spawn(options);
^
Error: Access to this API has been restricted
at ChildProcess.spawn (node:internal/child_process:388:28)
at Object.spawn (node:child_process:723:9)
at Object.<anonymous> (/home/index.js:3:14)
at Module._compile (node:internal/modules/cjs/loader:1120:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1174:10)
at Module.load (node:internal/modules/cjs/loader:998:32)
at Module._load (node:internal/modules/cjs/loader:839:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47 {
code: 'ERR_ACCESS_DENIED',
permission: 'ChildProcess'
}
--allow-fs-read
#
This flag configures file system read permissions using the Permission Model.
The valid arguments for the --allow-fs-read
flag are:
*
- To allow allFileSystemRead
operations.- Multiple paths can be allowed using multiple
--allow-fs-read
flags. Example--allow-fs-read=/folder1/ --allow-fs-read=/folder1/
Examples can be found in the File System Permissions documentation.
The initializer module also needs to be allowed. Consider the following example:
$ node --experimental-permission index.js
Error: Access to this API has been restricted
at node:internal/main/run_main_module:23:47 {
code: 'ERR_ACCESS_DENIED',
permission: 'FileSystemRead',
resource: '/Users/rafaelgss/repos/os/node/index.js'
}
The process needs to have access to the index.js
module:
node --experimental-permission --allow-fs-read=/path/to/index.js index.js
--allow-fs-write
#
This flag configures file system write permissions using the Permission Model.
The valid arguments for the --allow-fs-write
flag are:
*
- To allow allFileSystemWrite
operations.- Multiple paths can be allowed using multiple
--allow-fs-write
flags. Example--allow-fs-write=/folder1/ --allow-fs-write=/folder1/
Paths delimited by comma (,
) are no longer allowed.
When passing a single flag with a comma a warning will be displayed.
Examples can be found in the File System Permissions documentation.
--allow-wasi
#
When using the Permission Model, the process will not be capable of creating
any WASI instances by default.
For security reasons, the call will throw an ERR_ACCESS_DENIED
unless the
user explicitly passes the flag --allow-wasi
in the main Node.js process.
Example:
const { WASI } = require('node:wasi');
// Attempt to bypass the permission
new WASI({
version: 'preview1',
// Attempt to mount the whole filesystem
preopens: {
'/': '/',
},
});
$ node --experimental-permission --allow-fs-read=* index.js
node:wasi:99
const wrap = new _WASI(args, env, preopens, stdio);
^
Error: Access to this API has been restricted
at new WASI (node:wasi:99:18)
at Object.<anonymous> (/home/index.js:3:1)
at Module._compile (node:internal/modules/cjs/loader:1476:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1555:10)
at Module.load (node:internal/modules/cjs/loader:1288:32)
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:191:14)
at node:internal/main/run_main_module:30:49 {
code: 'ERR_ACCESS_DENIED',
permission: 'WASI',
}
--allow-worker
#
When using the Permission Model, the process will not be able to create any
worker threads by default.
For security reasons, the call will throw an ERR_ACCESS_DENIED
unless the
user explicitly pass the flag --allow-worker
in the main Node.js process.
Example:
const { Worker } = require('node:worker_threads');
// Attempt to bypass the permission
new Worker(__filename);
$ node --experimental-permission --allow-fs-read=* index.js
node:internal/worker:188
this[kHandle] = new WorkerImpl(url,
^
Error: Access to this API has been restricted
at new Worker (node:internal/worker:188:21)
at Object.<anonymous> (/home/index.js.js:3:1)
at Module._compile (node:internal/modules/cjs/loader:1120:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1174:10)
at Module.load (node:internal/modules/cjs/loader:998:32)
at Module._load (node:internal/modules/cjs/loader:839:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47 {
code: 'ERR_ACCESS_DENIED',
permission: 'WorkerThreads'
}
--build-snapshot
#
Generates a snapshot blob when the process exits and writes it to
disk, which can be loaded later with --snapshot-blob
.
When building the snapshot, if --snapshot-blob
is not specified,
the generated blob will be written, by default, to snapshot.blob
in the current working directory. Otherwise it will be written to
the path specified by --snapshot-blob
.
$ echo "globalThis.foo = 'I am from the snapshot'" > snapshot.js
# Run snapshot.js to initialize the application and snapshot the
# state of it into snapshot.blob.
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js
$ echo "console.log(globalThis.foo)" > index.js
# Load the generated snapshot and start the application from index.js.
$ node --snapshot-blob snapshot.blob index.js
I am from the snapshot
The v8.startupSnapshot
API can be used to specify an entry point at
snapshot building time, thus avoiding the need of an additional entry
script at deserialization time:
$ echo "require('v8').startupSnapshot.setDeserializeMainFunction(() => console.log('I am from the snapshot'))" > snapshot.js
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js
$ node --snapshot-blob snapshot.blob
I am from the snapshot
For more information, check out the v8.startupSnapshot
API documentation.
Currently the support for run-time snapshot is experimental in that:
- User-land modules are not yet supported in the snapshot, so only one single file can be snapshotted. Users can bundle their applications into a single script with their bundler of choice before building a snapshot, however.
- Only a subset of the built-in modules work in the snapshot, though the Node.js core test suite checks that a few fairly complex applications can be snapshotted. Support for more modules are being added. If any crashes or buggy behaviors occur when building a snapshot, please file a report in the Node.js issue tracker and link to it in the tracking issue for user-land snapshots.
--build-snapshot-config
#
Specifies the path to a JSON configuration file which configures snapshot creation behavior.
The following options are currently supported:
builder
<string> Required. Provides the name to the script that is executed before building the snapshot, as if--build-snapshot
had been passed withbuilder
as the main script name.withoutCodeCache
<boolean> Optional. Including the code cache reduces the time spent on compiling functions included in the snapshot at the expense of a bigger snapshot size and potentially breaking portability of the snapshot.
When using this flag, additional script files provided on the command line will not be executed and instead be interpreted as regular command line arguments.
-c
, --check
#
Syntax check the script without executing.
--completion-bash
#
Print source-able bash completion script for Node.js.
node --completion-bash > node_bash_completion
source node_bash_completion
-C condition
, --conditions=condition
#
Provide custom conditional exports resolution conditions.
Any number of custom string condition names are permitted.
The default Node.js conditions of "node"
, "default"
, "import"
, and
"require"
will always apply as defined.
For example, to run a module with "development" resolutions:
node -C development app.js
--cpu-prof
#
Starts the V8 CPU profiler on start up, and writes the CPU profile to disk before exit.
If --cpu-prof-dir
is not specified, the generated profile is placed
in the current working directory.
If --cpu-prof-name
is not specified, the generated profile is
named CPU.${yyyymmdd}.${hhmmss}.${pid}.${tid}.${seq}.cpuprofile
.
$ node --cpu-prof index.js
$ ls *.cpuprofile
CPU.20190409.202950.15293.0.0.cpuprofile
--cpu-prof-dir
#
Specify the directory where the CPU profiles generated by --cpu-prof
will
be placed.
The default value is controlled by the
--diagnostic-dir
command-line option.
--cpu-prof-interval
#
Specify the sampling interval in microseconds for the CPU profiles generated
by --cpu-prof
. The default is 1000 microseconds.
--cpu-prof-name
#
Specify the file name of the CPU profile generated by --cpu-prof
.
--diagnostic-dir=directory
#
Set the directory to which all diagnostic output files are written. Defaults to current working directory.
Affects the default output directory of:
--disable-warning=code-or-type
#
Disable specific process warnings by code
or type
.
Warnings emitted from process.emitWarning()
may contain a
code
and a type
. This option will not-emit warnings that have a matching
code
or type
.
List of deprecation warnings.
The Node.js core warning types are: DeprecationWarning
and
ExperimentalWarning
For example, the following script will not emit
DEP0025 require('node:sys')
when executed with
node --disable-warning=DEP0025
:
import sys from 'node:sys';
const sys = require('node:sys');
For example, the following script will emit the
DEP0025 require('node:sys')
, but not any Experimental
Warnings (such as
ExperimentalWarning: vm.measureMemory
is an experimental feature
in <=v21) when executed with node --disable-warning=ExperimentalWarning
:
import sys from 'node:sys';
import vm from 'node:vm';
vm.measureMemory();
const sys = require('node:sys');
const vm = require('node:vm');
vm.measureMemory();
--disable-wasm-trap-handler
#
By default, Node.js enables trap-handler-based WebAssembly bound checks. As a result, V8 does not need to insert inline bound checks int the code compiled from WebAssembly which may speedup WebAssembly execution significantly, but this optimization requires allocating a big virtual memory cage (currently 10GB). If the Node.js process does not have access to a large enough virtual memory address space due to system configurations or hardware limitations, users won't be able to run any WebAssembly that involves allocation in this virtual memory cage and will see an out-of-memory error.
$ ulimit -v 5000000
$ node -p "new WebAssembly.Memory({ initial: 10, maximum: 100 });"
[eval]:1
new WebAssembly.Memory({ initial: 10, maximum: 100 });
^
RangeError: WebAssembly.Memory(): could not allocate memory
at [eval]:1:1
at runScriptInThisContext (node:internal/vm:209:10)
at node:internal/process/execution:118:14
at [eval]-wrapper:6:24
at runScript (node:internal/process/execution:101:62)
at evalScript (node:internal/process/execution:136:3)
at node:internal/main/eval_string:49:3
--disable-wasm-trap-handler
disables this optimization so that
users can at least run WebAssembly (with less optimal performance)
when the virtual memory address space available to their Node.js
process is lower than what the V8 WebAssembly memory cage needs.
--disable-proto=mode
#
Disable the Object.prototype.__proto__
property. If mode
is delete
, the
property is removed entirely. If mode
is throw
, accesses to the
property throw an exception with the code ERR_PROTO_ACCESS
.
--disallow-code-generation-from-strings
#
Make built-in language features like eval
and new Function
that generate
code from strings throw an exception instead. This does not affect the Node.js
node:vm
module.
--expose-gc
#
This flag will expose the gc extension from V8.
if (globalThis.gc) {
globalThis.gc();
}
--dns-result-order=order
#
Set the default value of order
in dns.lookup()
and
dnsPromises.lookup()
. The value could be:
ipv4first
: sets defaultorder
toipv4first
.ipv6first
: sets defaultorder
toipv6first
.verbatim
: sets defaultorder
toverbatim
.
The default is verbatim
and dns.setDefaultResultOrder()
have higher
priority than --dns-result-order
.
--enable-fips
#
Enable FIPS-compliant crypto at startup. (Requires Node.js to be built against FIPS-compatible OpenSSL.)
--enable-source-maps
#
Enable Source Map v3 support for stack traces.
When using a transpiler, such as TypeScript, stack traces thrown by an
application reference the transpiled code, not the original source position.
--enable-source-maps
enables caching of Source Maps and makes a best
effort to report stack traces relative to the original source file.
Overriding Error.prepareStackTrace
may prevent --enable-source-maps
from
modifying the stack trace. Call and return the results of the original
Error.prepareStackTrace
in the overriding function to modify the stack trace
with source maps.
const originalPrepareStackTrace = Error.prepareStackTrace;
Error.prepareStackTrace = (error, trace) => {
// Modify error and trace and format stack trace with
// original Error.prepareStackTrace.
return originalPrepareStackTrace(error, trace);
};
Note, enabling source maps can introduce latency to your application
when Error.stack
is accessed. If you access Error.stack
frequently
in your application, take into account the performance implications
of --enable-source-maps
.
--env-file=config
#
Loads environment variables from a file relative to the current directory,
making them available to applications on process.env
. The environment
variables which configure Node.js, such as NODE_OPTIONS
,
are parsed and applied. If the same variable is defined in the environment and
in the file, the value from the environment takes precedence.
You can pass multiple --env-file
arguments. Subsequent files override
pre-existing variables defined in previous files.
An error is thrown if the file does not exist.
node --env-file=.env --env-file=.development.env index.js
The format of the file should be one line per key-value pair of environment
variable name and value separated by =
:
PORT=3000
Any text after a #
is treated as a comment:
# This is a comment
PORT=3000 # This is also a comment
Values can start and end with the following quotes: `
, "
or '
.
They are omitted from the values.
USERNAME="nodejs" # will result in `nodejs` as the value.
Multi-line values are supported:
MULTI_LINE="THIS IS
A MULTILINE"
# will result in `THIS IS\nA MULTILINE` as the value.
Export keyword before a key is ignored:
export USERNAME="nodejs" # will result in `nodejs` as the value.
If you want to load environment variables from a file that may not exist, you
can use the --env-file-if-exists
flag instead.
-e
, --eval "script"
#
Evaluate the following argument as JavaScript. The modules which are
predefined in the REPL can also be used in script
.
On Windows, using cmd.exe
a single quote will not work correctly because it
only recognizes double "
for quoting. In Powershell or Git bash, both '
and "
are usable.
--experimental-default-type=type
#
Define which module system, module
or commonjs
, to use for the following:
-
String input provided via
--eval
or STDIN, if--input-type
is unspecified. -
Files ending in
.js
or with no extension, if there is nopackage.json
file present in the same folder or any parent folder. -
Files ending in
.js
or with no extension, if the nearest parentpackage.json
field lacks a"type"
field; unless thepackage.json
folder or any parent folder is inside anode_modules
folder.
In other words, --experimental-default-type=module
flips all the places where
Node.js currently defaults to CommonJS to instead default to ECMAScript modules,
with the exception of folders and subfolders below node_modules
, for backward
compatibility.
Under --experimental-default-type=module
and --experimental-wasm-modules
,
files with no extension will be treated as WebAssembly if they begin with the
WebAssembly magic number (\0asm
); otherwise they will be treated as ES module
JavaScript.
--experimental-eventsource
#
Enable exposition of EventSource Web API on the global scope.
--experimental-import-meta-resolve
#
Enable experimental import.meta.resolve()
parent URL support, which allows
passing a second parentURL
argument for contextual resolution.
Previously gated the entire import.meta.resolve
feature.
--experimental-loader=module
#
This flag is discouraged and may be removed in a future version of Node.js. Please use
--import
withregister()
instead.
Specify the module
containing exported module customization hooks.
module
may be any string accepted as an import
specifier.
This feature requires --allow-worker
if used with the Permission Model.
--experimental-network-imports
#
Enable experimental support for the https:
protocol in import
specifiers.
--experimental-network-inspection
#
Enable experimental support for the network inspection with Chrome DevTools.
--experimental-permission
#
Enable the Permission Model for current process. When enabled, the following permissions are restricted:
- File System - manageable through
--allow-fs-read
,--allow-fs-write
flags - Child Process - manageable through
--allow-child-process
flag - Worker Threads - manageable through
--allow-worker
flag - WASI - manageable through
--allow-wasi
flag - Addons - manageable through
--allow-addons
flag
--experimental-policy
#
Use the specified file as a security policy.
--experimental-require-module
#
Supports loading a synchronous ES module graph in require()
.
See Loading ECMAScript modules using require()
.
--experimental-sea-config
#
Use this flag to generate a blob that can be injected into the Node.js binary to produce a single executable application. See the documentation about this configuration for details.
--experimental-shadow-realm
#
Use this flag to enable ShadowRealm support.
--experimental-test-coverage
#
When used in conjunction with the node:test
module, a code coverage report is
generated as part of the test runner output. If no tests are run, a coverage
report is not generated. See the documentation on
collecting code coverage from tests for more details.
--experimental-test-module-mocks
#
Enable module mocking in the test runner.
This feature requires --allow-worker
if used with the Permission Model.
--experimental-vm-modules
#
Enable experimental ES Module support in the node:vm
module.
--experimental-wasi-unstable-preview1
#
Enable experimental WebAssembly System Interface (WASI) support.
--experimental-wasm-modules
#
Enable experimental WebAssembly module support.
--experimental-websocket
#
Enable experimental WebSocket
support.
--force-context-aware
#
Disable loading native addons that are not context-aware.
--force-fips
#
Force FIPS-compliant crypto on startup. (Cannot be disabled from script code.)
(Same requirements as --enable-fips
.)
--force-node-api-uncaught-exceptions-policy
#
Enforces uncaughtException
event on Node-API asynchronous callbacks.
To prevent from an existing add-on from crashing the process, this flag is not enabled by default. In the future, this flag will be enabled by default to enforce the correct behavior.
--frozen-intrinsics
#
Enable experimental frozen intrinsics like Array
and Object
.
Only the root context is supported. There is no guarantee that
globalThis.Array
is indeed the default intrinsic reference. Code may break
under this flag.
To allow polyfills to be added,
--require
and --import
both run before freezing intrinsics.
--heap-prof
#
Starts the V8 heap profiler on start up, and writes the heap profile to disk before exit.
If --heap-prof-dir
is not specified, the generated profile is placed
in the current working directory.
If --heap-prof-name
is not specified, the generated profile is
named Heap.${yyyymmdd}.${hhmmss}.${pid}.${tid}.${seq}.heapprofile
.
$ node --heap-prof index.js
$ ls *.heapprofile
Heap.20190409.202950.15293.0.001.heapprofile
--heap-prof-dir
#
Specify the directory where the heap profiles generated by --heap-prof
will
be placed.
The default value is controlled by the
--diagnostic-dir
command-line option.
--heap-prof-interval
#
Specify the average sampling interval in bytes for the heap profiles generated
by --heap-prof
. The default is 512 * 1024 bytes.
--heap-prof-name
#
Specify the file name of the heap profile generated by --heap-prof
.
--heapsnapshot-near-heap-limit=max_count
#
Writes a V8 heap snapshot to disk when the V8 heap usage is approaching the
heap limit. count
should be a non-negative integer (in which case
Node.js will write no more than max_count
snapshots to disk).
When generating snapshots, garbage collection may be triggered and bring
the heap usage down. Therefore multiple snapshots may be written to disk
before the Node.js instance finally runs out of memory. These heap snapshots
can be compared to determine what objects are being allocated during the
time consecutive snapshots are taken. It's not guaranteed that Node.js will
write exactly max_count
snapshots to disk, but it will try
its best to generate at least one and up to max_count
snapshots before the
Node.js instance runs out of memory when max_count
is greater than 0
.
Generating V8 snapshots takes time and memory (both memory managed by the V8 heap and native memory outside the V8 heap). The bigger the heap is, the more resources it needs. Node.js will adjust the V8 heap to accommodate the additional V8 heap memory overhead, and try its best to avoid using up all the memory available to the process. When the process uses more memory than the system deems appropriate, the process may be terminated abruptly by the system, depending on the system configuration.
$ node --max-old-space-size=100 --heapsnapshot-near-heap-limit=3 index.js
Wrote snapshot to Heap.20200430.100036.49580.0.001.heapsnapshot
Wrote snapshot to Heap.20200430.100037.49580.0.002.heapsnapshot
Wrote snapshot to Heap.20200430.100038.49580.0.003.heapsnapshot
<--- Last few GCs --->
[49580:0x110000000] 4826 ms: Mark-sweep 130.6 (147.8) -> 130.5 (147.8) MB, 27.4 / 0.0 ms (average mu = 0.126, current mu = 0.034) allocation failure scavenge might not succeed
[49580:0x110000000] 4845 ms: Mark-sweep 130.6 (147.8) -> 130.6 (147.8) MB, 18.8 / 0.0 ms (average mu = 0.088, current mu = 0.031) allocation failure scavenge might not succeed
<--- JS stacktrace --->
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
....
--heapsnapshot-signal=signal
#
Enables a signal handler that causes the Node.js process to write a heap dump
when the specified signal is received. signal
must be a valid signal name.
Disabled by default.
$ node --heapsnapshot-signal=SIGUSR2 index.js &
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
node 1 5.5 6.1 787252 247004 ? Ssl 16:43 0:02 node --heapsnapshot-signal=SIGUSR2 index.js
$ kill -USR2 1
$ ls
Heap.20190718.133405.15554.0.001.heapsnapshot
-h
, --help
#
Print node command-line options. The output of this option is less detailed than this document.
--icu-data-dir=file
#
Specify ICU data load path. (Overrides NODE_ICU_DATA
.)
--import=module
#
Preload the specified module at startup. If the flag is provided several times,
each module will be executed sequentially in the order they appear, starting
with the ones provided in NODE_OPTIONS
.
Follows ECMAScript module resolution rules.
Use --require
to load a CommonJS module.
Modules preloaded with --require
will run before modules preloaded with --import
.
--input-type=type
#
This configures Node.js to interpret --eval
or STDIN
input as CommonJS or
as an ES module. Valid values are "commonjs"
or "module"
. The default is
"commonjs"
unless --experimental-default-type=module
is used.
The REPL does not support this option. Usage of --input-type=module
with
--print
will throw an error, as --print
does not support ES module
syntax.
--insecure-http-parser
#
Enable leniency flags on the HTTP parser. This may allow interoperability with non-conformant HTTP implementations.
When enabled, the parser will accept the following:
- Invalid HTTP headers values.
- Invalid HTTP versions.
- Allow message containing both
Transfer-Encoding
andContent-Length
headers. - Allow extra data after message when
Connection: close
is present. - Allow extra trasfer encodings after
chunked
has been provided. - Allow
\n
to be used as token separator instead of\r\n
. - Allow
\r\n
not to be provided after a chunk. - Allow spaces to be present after a chunk size and before
\r\n
.
All the above will expose your application to request smuggling or poisoning attack. Avoid using this option.
--inspect[=[host:]port]
#
Activate inspector on host:port
. Default is 127.0.0.1:9229
. If port 0
is
specified, a random available port will be used.
V8 inspector integration allows tools such as Chrome DevTools and IDEs to debug and profile Node.js instances. The tools attach to Node.js instances via a tcp port and communicate using the Chrome DevTools Protocol. See V8 Inspector integration for Node.js for further explanation on Node.js debugger.
Warning: binding inspector to a public IP:port combination is insecure#
Binding the inspector to a public IP (including 0.0.0.0
) with an open port is
insecure, as it allows external hosts to connect to the inspector and perform
a remote code execution attack.
If specifying a host, make sure that either:
- The host is not accessible from public networks.
- A firewall disallows unwanted connections on the port.
More specifically, --inspect=0.0.0.0
is insecure if the port (9229
by
default) is not firewall-protected.
See the debugging security implications section for more information.
--inspect-brk[=[host:]port]
#
Activate inspector on host:port
and break at start of user script.
Default host:port
is 127.0.0.1:9229
. If port 0
is specified,
a random available port will be used.
See V8 Inspector integration for Node.js for further explanation on Node.js debugger.
--inspect-port=[host:]port
#
Set the host:port
to be used when the inspector is activated.
Useful when activating the inspector by sending the SIGUSR1
signal.
Default host is 127.0.0.1
. If port 0
is specified,
a random available port will be used.
See the security warning below regarding the host
parameter usage.
--inspect-publish-uid=stderr,http
#
Specify ways of the inspector web socket url exposure.
By default inspector websocket url is available in stderr and under /json/list
endpoint on http://host:port/json/list
.
--inspect-wait[=[host:]port]
#
Activate inspector on host:port
and wait for debugger to be attached.
Default host:port
is 127.0.0.1:9229
. If port 0
is specified,
a random available port will be used.
See V8 Inspector integration for Node.js for further explanation on Node.js debugger.
-i
, --interactive
#
Opens the REPL even if stdin does not appear to be a terminal.
--jitless
#
Disable runtime allocation of executable memory. This may be required on some platforms for security reasons. It can also reduce attack surface on other platforms, but the performance impact may be severe.
--max-http-header-size=size
#
Specify the maximum size, in bytes, of HTTP headers. Defaults to 16 KiB.
--napi-modules
#
This option is a no-op. It is kept for compatibility.
--network-family-autoselection-attempt-timeout
#
Sets the default value for the network family autoselection attempt timeout.
For more information, see net.getDefaultAutoSelectFamilyAttemptTimeout()
.
--no-addons
#
Disable the node-addons
exports condition as well as disable loading
native addons. When --no-addons
is specified, calling process.dlopen
or
requiring a native C++ addon will fail and throw an exception.
--no-deprecation
#
Silence deprecation warnings.
--no-experimental-detect-module
#
Disable using