コマンドライン API#

Node.js にはさまざまな CLI オプションが付属しています。これらのオプションは、組み込みのデバッグ、スクリプトを実行する複数の方法、その他の役立つランタイムオプションを公開します。

このドキュメントをターミナルでマニュアルページとして表示するには、man node を実行します。

概要#

node [options] [V8 options] [<program-entry-point> | -e "script" | -] [--] [arguments]

node inspect [<program-entry-point> | -e "script" | <host>:<port>] …

node --v8-options

引数なしで実行して REPL を起動します。

node inspect の詳細については、デバッガーのドキュメントを参照してください。

プログラムのエントリーポイント#

プログラムのエントリーポイントは、仕様のような文字列です。文字列が絶対パスでない場合、現在の作業ディレクトリからの相対パスとして解決されます。その後、そのパスは、CommonJS モジュールローダーによって解決されるか、--experimental-default-type=module が渡された場合は ES モジュールローダーによって解決されます。対応するファイルが見つからない場合、エラーがスローされます。

ファイルが見つかった場合、次のいずれかの条件で、そのパスは ES モジュールローダーに渡されます。

  • プログラムは、--import--experimental-default-type=module など、エントリーポイントを ECMAScript モジュールローダーで強制的にロードするコマンドラインフラグで開始されました。
  • ファイルには .mjs 拡張子があります。
  • ファイルに .cjs 拡張子がなく、最も近い親の package.json ファイルに、値が "module" であるトップレベルの "type" フィールドが含まれています。

それ以外の場合、ファイルは CommonJS モジュールローダーを使用してロードされます。詳細については、モジュールローダーを参照してください。

ECMAScript モジュールローダーのエントリーポイントの注意点#

ロード時、ES モジュールローダーはプログラムのエントリーポイントをロードし、node コマンドは入力として .js.mjs、または .cjs 拡張子を持つファイルのみを受け入れます。 --experimental-wasm-modules が有効な場合は .wasm 拡張子を持つファイル、--experimental-default-type=module が渡された場合は拡張子のないファイルを受け入れます。

オプション#

V8 オプションを含むすべてのオプションで、単語をダッシュ (-) とアンダースコア (_) の両方で区切ることができます。たとえば、--pending-deprecation--pending_deprecation と同等です。

--max-http-header-size など)単一の値を取るオプションが複数回渡された場合、最後に渡された値が使用されます。コマンドラインからのオプションは、NODE_OPTIONS 環境変数を介して渡されるオプションよりも優先されます。

-#

stdin のエイリアス。他のコマンドラインユーティリティでの - の使用と同様に、stdin からスクリプトが読み取られ、残りのオプションがそのスクリプトに渡されることを意味します。

--#

node オプションの終わりを示します。残りの引数をスクリプトに渡します。これよりも前にスクリプトのファイル名または eval/print スクリプトが指定されていない場合は、次の引数がスクリプトのファイル名として使用されます。

--abort-on-uncaught-exception#

終了する代わりに中止すると、デバッガー (lldbgdbmdb など) を使用した事後分析のためにコアファイルが生成されます。

このフラグが渡された場合でも、process.setUncaughtExceptionCaptureCallback() (およびそれを使用する node:domain モジュールの使用) を介して、中止しないように動作を設定できます。

--allow-addons#

安定性: 1.1 - アクティブな開発

パーミッションモデルを使用する場合、プロセスはデフォルトでネイティブアドオンを使用できません。そうしようとすると、ユーザーが Node.js の起動時に明示的に --allow-addons フラグを渡さない限り、ERR_DLOPEN_DISABLED がスローされます。

// 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#

安定性: 1.1 - アクティブな開発

パーミッションモデルを使用する場合、プロセスはデフォルトで子プロセスを生成できません。ユーザーがNode.jsの起動時に--allow-child-processフラグを明示的に渡さない限り、子プロセスを生成しようとするとERR_ACCESS_DENIEDがスローされます。

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#

安定性: 1.1 - アクティブな開発

このフラグは、パーミッションモデルを使用してファイルシステムの読み取り権限を設定します。

--allow-fs-readフラグの有効な引数は次のとおりです。

  • * - すべてのFileSystemRead操作を許可します。
  • 複数のパスを許可するには、複数の--allow-fs-readフラグを使用できます。例:--allow-fs-read=/folder1/ --allow-fs-read=/folder1/

カンマ(,)で区切られたパスは許可されなくなりました。カンマを含む単一のフラグを渡すと、警告が表示されます。

例は、ファイルシステムの権限のドキュメントにあります。

相対パスは、CLIフラグではまだサポートされていません。

初期化モジュールも許可する必要があります。次の例を考えてみましょう。

$ node --experimental-permission t.js
node:internal/modules/cjs/loader:162
  const result = internalModuleStat(filename);
                 ^

Error: Access to this API has been restricted
    at stat (node:internal/modules/cjs/loader:162:18)
    at Module._findPath (node:internal/modules/cjs/loader:640:16)
    at resolveMainPath (node:internal/modules/run_main:15:25)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:53:24)
    at node:internal/main/run_main_module:23:47 {
  code: 'ERR_ACCESS_DENIED',
  permission: 'FileSystemRead',
  resource: '/Users/rafaelgss/repos/os/node/t.js'
} 

プロセスはindex.jsモジュールへのアクセス権を持っている必要があります。

node --experimental-permission --allow-fs-read=/path/to/index.js index.js 

--allow-fs-write#

安定性: 1.1 - アクティブな開発

このフラグは、パーミッションモデルを使用してファイルシステムの書き込み権限を設定します。

--allow-fs-writeフラグの有効な引数は次のとおりです。

  • * - すべてのFileSystemWrite操作を許可します。
  • 複数のパスを許可するには、複数の--allow-fs-readフラグを使用できます。例:--allow-fs-read=/folder1/ --allow-fs-read=/folder1/

カンマ(,)で区切られたパスは許可されなくなりました。カンマを含む単一のフラグを渡すと、警告が表示されます。

例は、ファイルシステムの権限のドキュメントにあります。

相対パスは、CLIフラグではサポートされていません。

--allow-worker#

安定性: 1.1 - アクティブな開発

パーミッションモデルを使用する場合、プロセスはデフォルトでワーカースレッドを作成できません。セキュリティ上の理由から、メインのNode.jsプロセスでフラグ--allow-workerを明示的に渡さない限り、呼び出しはERR_ACCESS_DENIEDをスローします。

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#

安定性: 1 - 実験的

プロセスが終了するときにスナップショットブロブを生成し、それをディスクに書き込みます。これは後で--snapshot-blobでロードできます。

スナップショットを構築するときに、--snapshot-blobが指定されていない場合、生成されたブロブは、デフォルトで現在の作業ディレクトリのsnapshot.blobに書き込まれます。それ以外の場合は、--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 

v8.startupSnapshot APIを使用すると、スナップショットの構築時にエントリポイントを指定できるため、デシリアライズ時に追加のエントリスクリプトは不要になります。

$ 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 

詳細については、v8.startupSnapshot APIドキュメントを確認してください。

現在、ランタイムスナップショットのサポートは実験的であり、次のような制限があります。

  1. ユーザーランドモジュールはまだスナップショットでサポートされていないため、スナップショットできるのは単一のファイルのみです。ただし、ユーザーはスナップショットを構築する前に、任意のバンドラーを使用してアプリケーションを単一のスクリプトにバンドルできます。
  2. 組み込みモジュールのサブセットのみがスナップショットで機能しますが、Node.jsコアテストスイートでは、いくつかの非常に複雑なアプリケーションをスナップショットできることが確認されています。より多くのモジュールのサポートが追加されています。スナップショットを構築するときにクラッシュやバグのある動作が発生した場合は、Node.jsのIssue Trackerにレポートを提出し、ユーザーランドスナップショットの追跡Issueにリンクしてください。

--build-snapshot-config#

安定性: 1 - 実験的

スナップショット作成の動作を設定するJSON構成ファイルへのパスを指定します。

現在、次のオプションがサポートされています。

  • builder <string> 必須。スナップショットを構築する前に実行されるスクリプトの名前を、--build-snapshotbuilderをメインスクリプト名として渡された場合と同様に指定します。
  • withoutCodeCache <boolean> オプション。コードキャッシュを含めると、スナップショットに含まれる関数のコンパイルに費やす時間が短縮されますが、スナップショットのサイズが大きくなり、スナップショットの移植性が損なわれる可能性があります。

このフラグを使用すると、コマンドラインで提供される追加のスクリプトファイルは実行されず、代わりに通常のコマンドライン引数として解釈されます。

-c, --check#

実行せずにスクリプトの構文をチェックします。

--completion-bash#

Node.jsのソース可能なbash補完スクリプトを出力します。

node --completion-bash > node_bash_completion
source node_bash_completion 

-C condition, --conditions=condition#

安定性: 1 - 実験的

カスタムの条件付きエクスポートの解決条件の実験的なサポートを有効にします。

任意の数のカスタム文字列条件名を使用できます。

"node""default""import"、および"require"のデフォルトのNode.js条件は、定義どおりに常に適用されます。

たとえば、「development」解決でモジュールを実行するには、次のようにします。

node -C development app.js 

--cpu-prof#

安定性: 1 - 実験的

起動時にV8 CPUプロファイラーを開始し、終了前にCPUプロファイルをディスクに書き込みます。

--cpu-prof-dirが指定されていない場合、生成されたプロファイルは現在の作業ディレクトリに配置されます。

--cpu-prof-nameが指定されていない場合、生成されたプロファイルの名前はCPU.${yyyymmdd}.${hhmmss}.${pid}.${tid}.${seq}.cpuprofileになります。

$ node --cpu-prof index.js
$ ls *.cpuprofile
CPU.20190409.202950.15293.0.0.cpuprofile 

--cpu-prof-dir#

安定性: 1 - 実験的

--cpu-profによって生成されたCPUプロファイルが配置されるディレクトリを指定します。

デフォルト値は、--diagnostic-dirコマンドラインオプションによって制御されます。

--cpu-prof-interval#

安定性: 1 - 実験的

--cpu-profによって生成されたCPUプロファイルのサンプリング間隔をマイクロ秒単位で指定します。デフォルトは1000マイクロ秒です。

--cpu-prof-name#

安定性: 1 - 実験的

--cpu-profによって生成されたCPUプロファイルの名前を指定します。

--diagnostic-dir=directory#

すべての診断出力ファイルが書き込まれるディレクトリを設定します。デフォルトは現在の作業ディレクトリです。

次のデフォルト出力ディレクトリに影響します。

--disable-warning=code-or-type#

安定性: 1.1 - アクティブな開発

codeまたはtypeで特定のプロセス警告を無効にします。

process.emitWarning()から発行された警告には、codetypeが含まれる場合があります。このオプションは、一致するcodeまたはtypeを持つ警告を出力しません。

非推奨のAPIのリスト。

Node.jsのコア警告タイプは、DeprecationWarningExperimentalWarningです。

たとえば、次のスクリプトは、node --disable-warning=DEP0025で実行した場合、DEP0025 require('node:sys')を出力しません。

import sys from 'node:sys';const sys = require('node:sys');

たとえば、次のスクリプトは、DEP0025 require('node:sys')を出力しますが、node --disable-warning=ExperimentalWarningで実行した場合、Experimental Warning(<=v21のExperimentalWarning: vm.measureMemoryは実験的な機能ですなど)は出力しません。

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-proto=mode#

Object.prototype.__proto__プロパティを無効にします。modedeleteの場合、プロパティは完全に削除されます。modethrowの場合、プロパティへのアクセスは、コードERR_PROTO_ACCESSで例外をスローします。

--disallow-code-generation-from-strings#

文字列からコードを生成するevalnew Functionなどの組み込み言語機能を、代わりに例外をスローするようにします。これは、Node.jsのnode:vmモジュールには影響しません。

--dns-result-order=order#

dns.lookup()およびdnsPromises.lookup()verbatimのデフォルト値を設定します。値は次のいずれかになります。

  • ipv4first:デフォルトのverbatimfalseに設定します。
  • verbatim:デフォルトのverbatimtrueに設定します。

デフォルトはverbatimであり、dns.setDefaultResultOrder()--dns-result-orderよりも優先度が高くなります。

--enable-fips#

起動時にFIPS準拠の暗号化を有効にします。(Node.jsがFIPS互換のOpenSSLに対してビルドされている必要があります。)

--enable-network-family-autoselection#

接続オプションで明示的に無効にしない限り、ファミリ自動選択アルゴリズムを有効にします。

--enable-source-maps#

スタックトレースのSource Map v3のサポートを有効にします。

TypeScriptなどのトランスパイラを使用する場合、アプリケーションによってスローされたスタックトレースは、元のソース位置ではなく、トランスパイルされたコードを参照します。--enable-source-mapsは、ソースマップのキャッシュを有効にし、元のソースファイルに関連するスタックトレースを報告するように最善を尽くします。

Error.prepareStackTraceをオーバーライドすると、--enable-source-mapsがスタックトレースを変更するのを妨げる可能性があります。ソースマップでスタックトレースを変更するには、オーバーライド関数で元のError.prepareStackTraceの呼び出しと結果を返します。

const originalPrepareStackTrace = Error.prepareStackTrace;
Error.prepareStackTrace = (error, trace) => {
  // Modify error and trace and format stack trace with
  // original Error.prepareStackTrace.
  return originalPrepareStackTrace(error, trace);
}; 

ソースマップを有効にすると、Error.stackにアクセスするときにアプリケーションに遅延が発生する可能性があることに注意してください。アプリケーションでError.stackに頻繁にアクセスする場合は、--enable-source-mapsのパフォーマンスへの影響を考慮してください。

--env-file=config#

安定性: 1.1 - アクティブな開発

現在のディレクトリを基準としたファイルから環境変数をロードし、process.envでアプリケーションで使用できるようにします。NODE_OPTIONSなどのNode.jsを設定する環境変数が解析され、適用されます。同じ変数が環境とファイルの両方で定義されている場合、環境からの値が優先されます。

--env-file 引数は複数渡すことができます。後続のファイルは、前のファイルで定義された既存の変数を上書きします。

node --env-file=.env --env-file=.development.env index.js 

ファイル形式は、環境変数名と値を = で区切ったキーと値のペアを1行に記述する必要があります。

PORT=3000 

# の後のテキストはすべてコメントとして扱われます。

# This is a comment
PORT=3000 # This is also a comment 

値は、次の引用符で開始および終了できます: \"、または '。これらは値から省略されます。

USERNAME="nodejs" # will result in `nodejs` as the value. 

複数行の値がサポートされています。

MULTI_LINE="THIS IS
A MULTILINE"
# will result in `THIS IS\nA MULTILINE` as the value. 

キーの前の Export キーワードは無視されます。

export USERNAME="nodejs" # will result in `nodejs` as the value. 

-e, --eval "script"#

次の引数を JavaScript として評価します。REPL で事前定義されているモジュールも script で使用できます。

Windows では、cmd.exe を使用すると、引用符としてダブル " のみが認識されるため、シングルクォートは正しく機能しません。PowerShell または Git bash では、'" の両方が使用可能です。

--experimental-default-type=type#

安定性: 1.0 - 早期開発

次のものに使用するモジュールシステム(module または commonjs)を定義します。

  • --input-type が指定されていない場合、--eval または STDIN を介して提供される文字列入力。

  • 同じフォルダーまたは親フォルダーに package.json ファイルが存在しない場合、.js で終わるファイル、または拡張子のないファイル。

  • 最寄りの親 package.json フィールドに "type" フィールドがない場合、.js で終わるファイル、または拡張子のないファイル。ただし、package.json フォルダーまたは親フォルダーが node_modules フォルダー内にある場合を除きます。

言い換えると、--experimental-default-type=module は、Node.js が現在 CommonJS をデフォルトとしているすべての場所を、後方互換性のために node_modules より下のフォルダーとサブフォルダーを除いて、代わりに ECMAScript モジュールをデフォルトとするように切り替えます。

--experimental-default-type=module および --experimental-wasm-modules の下では、拡張子のないファイルは、WebAssembly マジックナンバー (\0asm) で始まる場合、WebAssembly として扱われます。それ以外の場合は、ES モジュール JavaScript として扱われます。

--experimental-detect-module#

安定性: 1.0 - 早期開発

Node.js は、あいまいな入力のソースコードを検査して、ES モジュールの構文が含まれているかどうかを判断します。そのような構文が検出された場合、入力は ES モジュールとして扱われます。

あいまいな入力は次のように定義されます。

  • .js 拡張子または拡張子のないファイルで、制御用の package.json ファイルがないか、type フィールドがないもの。また、--experimental-default-type が指定されていない場合。
  • --input-type--experimental-default-type も指定されていない場合の文字列入力(--eval または STDIN)。

ES モジュール構文は、CommonJS として評価された場合にスローされる構文として定義されます。これには、import および export ステートメントと import.meta 参照が含まれます。CommonJS では有効な import() 式は含まれません

--experimental-import-meta-resolve#

コンテキスト解決のために2番目の parentURL 引数を渡すことを可能にする、実験的な import.meta.resolve() 親 URL サポートを有効にします。

以前は、import.meta.resolve 機能全体をゲートしていました。

--experimental-loader=module#

このフラグは推奨されておらず、将来の Node.js バージョンで削除される可能性があります。代わりに、register() を使用した --import を使用してください。

エクスポートされた モジュールカスタマイズフックを含む module を指定します。module は、import 指定子として受け入れられる任意の文字列にすることができます。

--experimental-network-imports#

安定性: 1 - 実験的

import 指定子での https: プロトコルの実験的サポートを有効にします。

--experimental-permission#

安定性: 1.1 - アクティブな開発

現在のプロセスの権限モデルを有効にします。有効にすると、次の権限が制限されます。

--experimental-policy#

指定されたファイルをセキュリティポリシーとして使用します。

--experimental-sea-config#

安定性: 1 - 実験的

このフラグを使用して、Node.js バイナリに挿入して 単一実行可能アプリケーションを作成できる blob を生成します。詳細については、この構成に関するドキュメントを参照してください。

--experimental-shadow-realm#

このフラグを使用して ShadowRealm のサポートを有効にします。

--experimental-test-coverage#

node:test モジュールと組み合わせて使用すると、テストランナー出力の一部としてコードカバレッジレポートが生成されます。テストが実行されない場合、カバレッジレポートは生成されません。詳細については、テストからのコードカバレッジの収集に関するドキュメントを参照してください。

--experimental-vm-modules#

node:vm モジュールで実験的な ES モジュールのサポートを有効にします。

--experimental-wasi-unstable-preview1#

実験的な WebAssembly System Interface (WASI) のサポートを有効にします。

--experimental-wasm-modules#

実験的な WebAssembly モジュールのサポートを有効にします。

--experimental-websocket#

実験的な WebSocket のサポートを有効にします。

--force-context-aware#

コンテキスト認識ではないネイティブアドオンの読み込みを無効にします。

--force-fips#

起動時に FIPS 準拠の暗号化を強制します。(スクリプトコードから無効にすることはできません。)(--enable-fips と同じ要件です。)

--force-node-api-uncaught-exceptions-policy#

Node-API 非同期コールバックで uncaughtException イベントを強制します。

既存のアドオンがプロセスをクラッシュさせるのを防ぐため、このフラグはデフォルトでは有効になっていません。将来的には、このフラグがデフォルトで有効になり、正しい動作が強制されます。

--frozen-intrinsics#

安定性: 1 - 実験的

ArrayObject などの実験的なフローズン組み込みを有効にします。

ルートコンテキストのみがサポートされています。globalThis.Array が実際にデフォルトの組み込み参照であるという保証はありません。このフラグの下ではコードが破損する可能性があります。

ポリフィルを追加できるように、--require および --import は両方とも組み込みをフリーズする前に実行されます。

--heap-prof#

安定性: 1 - 実験的

起動時に V8 ヒーププロファイラーを起動し、終了前にヒーププロファイルをディスクに書き込みます。

--heap-prof-dir が指定されていない場合、生成されたプロファイルは現在の作業ディレクトリに配置されます。

--heap-prof-name が指定されていない場合、生成されたプロファイルには Heap.${yyyymmdd}.${hhmmss}.${pid}.${tid}.${seq}.heapprofile という名前が付けられます。

$ node --heap-prof index.js
$ ls *.heapprofile
Heap.20190409.202950.15293.0.001.heapprofile 

--heap-prof-dir#

安定性: 1 - 実験的

--heap-prof によって生成されたヒーププロファイルが配置されるディレクトリを指定します。

デフォルト値は、--diagnostic-dirコマンドラインオプションによって制御されます。

--heap-prof-interval#

安定性: 1 - 実験的

--heap-prof によって生成されたヒーププロファイルのバイト単位の平均サンプリング間隔を指定します。デフォルトは 512 * 1024 バイトです。

--heap-prof-name#

安定性: 1 - 実験的

--heap-prof によって生成されたヒーププロファイルの名前を指定します。

--heapsnapshot-near-heap-limit=max_count#

安定性: 1 - 実験的

V8 ヒープの使用量がヒープ制限に近づくと、V8 ヒープスナップショットをディスクに書き込みます。count は負でない整数である必要があります(この場合、Node.js はディスクに max_count 個以下のスナップショットを書き込みます)。

スナップショットを生成すると、ガベージコレクションがトリガーされ、ヒープ使用量が減少する可能性があります。したがって、Node.js インスタンスが最終的にメモリ不足になる前に、複数のスナップショットがディスクに書き込まれる場合があります。これらのヒープスナップショットを比較して、連続したスナップショットが取得されたときに、どのオブジェクトが割り当てられているかを判断できます。Node.js がディスクに正確に max_count 個のスナップショットを書き込むことは保証されていませんが、max_count0 より大きい場合は、Node.js インスタンスがメモリ不足になる前に、少なくとも 1 つ、最大で max_count 個のスナップショットを生成するために最善を尽くします。

V8 スナップショットの生成には時間とメモリ(V8 ヒープで管理されるメモリと V8 ヒープ外のネイティブメモリの両方)がかかります。ヒープが大きいほど、必要なリソースが多くなります。Node.js は、V8 ヒープのメモリオーバーヘッドを追加するために V8 ヒープを調整し、プロセスで使用可能なすべてのメモリを使い果たさないように最善を尽くします。プロセスがシステムが適切と見なすよりも多くのメモリを使用すると、システム構成に応じて、プロセスはシステムによって突然終了される場合があります。

$ 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#

指定されたシグナルを受信したときに、Node.jsプロセスがヒープダンプを書き込むようにするシグナルハンドラーを有効にします。signal は有効なシグナル名である必要があります。デフォルトでは無効です。

$ 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#

node コマンドラインオプションを表示します。このオプションの出力は、このドキュメントよりも詳細度が低いです。

--icu-data-dir=file#

ICUデータロードパスを指定します。(NODE_ICU_DATAを上書きします。)

--import=module#

安定性: 1 - 実験的

起動時に指定されたモジュールをプリロードします。このフラグが複数回指定された場合、各モジュールは、NODE_OPTIONSで指定されたものから順に、表示される順序で実行されます。

ECMAScriptモジュールの解決ルールに従います。--requireを使用して、CommonJSモジュールをロードします。--requireでプリロードされたモジュールは、--importでプリロードされたモジュールよりも前に実行されます。

--input-type=type#

これにより、Node.jsが--evalまたはSTDIN入力をCommonJSまたはESモジュールとして解釈するように構成されます。有効な値は、"commonjs"または"module"です。デフォルトは、--experimental-default-type=moduleが使用されない限り、"commonjs"です。

REPLはこのオプションをサポートしていません。--print--input-type=moduleを使用すると、--printはESモジュール構文をサポートしていないため、エラーがスローされます。

--insecure-http-parser#

HTTPパーサーで寛容フラグを有効にします。これにより、非準拠のHTTP実装との相互運用が可能になる場合があります。

有効にすると、パーサーは以下を受け入れます。

  • 無効なHTTPヘッダーの値。
  • 無効なHTTPバージョン。
  • Transfer-EncodingContent-Lengthヘッダーの両方を含むメッセージを許可します。
  • Connection: closeが存在する場合、メッセージ後の余分なデータを許可します。
  • chunkedが提供された後に追加の転送エンコーディングを許可します。
  • \r\nの代わりに\nをトークン区切り文字として使用することを許可します。
  • チャンクの後に\r\nを提供しないことを許可します。
  • チャンクサイズの後および\r\nの前にスペースが存在することを許可します。

上記すべてにより、アプリケーションはリクエスト密輸またはポイズニング攻撃にさらされます。このオプションの使用は避けてください。

--inspect[=[host:]port]#

host:portでインスペクターをアクティブにします。デフォルトは127.0.0.1:9229です。

V8インスペクター統合により、Chrome DevToolsやIDEなどのツールでNode.jsインスタンスをデバッグおよびプロファイリングできます。ツールはtcpポートを介してNode.jsインスタンスに接続し、Chrome DevTools Protocolを使用して通信します。

警告: インスペクターを公開IP:ポートの組み合わせにバインドすることは安全ではありません#

インスペクターをオープンポートを持つ公開IP(0.0.0.0を含む)にバインドすることは安全ではありません。これにより、外部ホストがインスペクターに接続してリモートコード実行攻撃を実行できるためです。

ホストを指定する場合は、次のいずれかを確認してください。

  • ホストがパブリックネットワークからアクセスできない。
  • ファイアウォールがポートで不要な接続を許可しない。

具体的には、ポート(デフォルトでは9229)がファイアウォールで保護されていない場合、--inspect=0.0.0.0は安全ではありません。

詳細については、デバッグセキュリティの考慮事項セクションを参照してください。

--inspect-brk[=[host:]port]#

host:portでインスペクターをアクティブにし、ユーザースクリプトの開始時に中断します。デフォルトのhost:port127.0.0.1:9229です。

--inspect-port=[host:]port#

インスペクターがアクティブ化されたときに使用されるhost:portを設定します。SIGUSR1シグナルを送信してインスペクターをアクティブにする場合に便利です。

デフォルトのホストは127.0.0.1です。

hostパラメーターの使用に関する以下のセキュリティ警告を参照してください。

--inspect-publish-uid=stderr,http#

インスペクターのWebソケットURLを公開する方法を指定します。

デフォルトでは、インスペクターのwebsocket URLはstderrとhttp://host:port/json/list/json/listエンドポイントで利用できます。

-i, --interactive#

stdinがターミナルではない場合でも、REPLを開きます。

--jitless#

安定性: 1 - 実験的。このフラグはV8から継承されており、上流で変更される可能性があります。

実行可能メモリのランタイム割り当てを無効にします。これは、一部のプラットフォームではセキュリティ上の理由で必要になる場合があります。また、他のプラットフォームでの攻撃対象領域を減らすこともできますが、パフォーマンスへの影響は深刻になる可能性があります。

--max-http-header-size=size#

HTTPヘッダーの最大サイズをバイト単位で指定します。デフォルトは16KiBです。

--napi-modules#

このオプションはno-opです。互換性のために保持されています。

--no-addons#

node-addonsのエクスポート条件を無効にするだけでなく、ネイティブアドオンのロードを無効にします。--no-addonsが指定されている場合、process.dlopenを呼び出すか、ネイティブC++アドオンを必要とすると、失敗して例外がスローされます。

--no-deprecation#

非推奨の警告を抑制します。

--no-experimental-fetch#

グローバルスコープでのFetch APIの公開を無効にします。

--no-experimental-global-customevent#

グローバルスコープでのCustomEvent Web APIの公開を無効にします。

--no-experimental-global-navigator#

安定性: 1 - 実験的

グローバルスコープでのNavigator APIの公開を無効にします。

--no-experimental-global-webcrypto#

グローバルスコープでのWeb Crypto APIの公開を無効にします。

--no-experimental-repl-await#

このフラグを使用して、REPLでのトップレベルのawaitを無効にします。

--no-extra-info-on-fatal-exception#

終了の原因となる致命的な例外に関する追加情報を非表示にします。

--no-force-async-hooks-checks#

async_hooksのランタイムチェックを無効にします。これらは、async_hooksが有効になっている場合に動的に有効になります。

--no-global-search-paths#

$HOME/.node_modules$NODE_PATHなどのグローバルパスからモジュールを検索しません。

--no-network-family-autoselection#

接続オプションで明示的に有効にしない限り、ファミリー自動選択アルゴリズムを無効にします。

--no-warnings#

すべてのプロセス警告(非推奨を含む)を抑制します。

--node-memory-debug#

Node.js内部のメモリリークに関する追加のデバッグチェックを有効にします。これは通常、Node.js自体をデバッグする開発者にのみ役立ちます。

--openssl-config=file#

起動時にOpenSSL構成ファイルをロードします。他の用途の中でも、Node.jsがFIPS対応のOpenSSLに対してビルドされている場合、これを使用してFIPS準拠の暗号化を有効にできます。

--openssl-legacy-provider#

OpenSSL 3.0レガシープロバイダーを有効にします。詳細については、OSSL_PROVIDER-legacyを参照してください。

--openssl-shared-config#

OpenSSLのデフォルト構成セクションであるopenssl_confをOpenSSL構成ファイルから読み取ることを有効にします。デフォルトの構成ファイルはopenssl.cnfという名前ですが、環境変数OPENSSL_CONFを使用するか、コマンドラインオプション--openssl-configを使用して変更できます。デフォルトのOpenSSL構成ファイルの場所は、OpenSSLがNode.jsにどのようにリンクされているかによって異なります。OpenSSL構成を共有すると、意図しない影響が生じる可能性があり、このオプションが使用されていない場合のデフォルトであるnodejs_confであるNode.js固有の構成セクションを使用することをお勧めします。

--pending-deprecation#

保留中の非推奨警告を発行します。

保留中の非推奨は、一般的にランタイム非推奨と同じですが、注目すべき例外として、デフォルトでオフになっており、--pending-deprecationコマンドラインフラグまたはNODE_PENDING_DEPRECATION=1環境変数が設定されていない限り発行されません。保留中の非推奨は、開発者が非推奨のAPI使用を検出するために利用できる、一種の選択的な「早期警告」メカニズムを提供するために使用されます。

--policy-integrity=sri#

安定性: 1 - 実験的

ポリシーが指定された整合性を持たない場合、コードを実行する前に Node.js にエラーを発生させるように指示します。パラメータとして Subresource Integrity 文字列が必要です。

--preserve-symlinks#

モジュールを解決およびキャッシュする際に、モジュールローダーにシンボリックリンクを保持するように指示します。

デフォルトでは、Node.js がシンボリックリンクで別のディスク上の場所にリンクされているパスからモジュールをロードする場合、Node.js はリンクをデリファレンスし、モジュールの実際のディスク上の「実パス」を識別子として、また他の依存モジュールを検索するためのルートパスとして使用します。ほとんどの場合、このデフォルトの動作は許容されます。ただし、以下の例に示すように、シンボリックリンクされたピア依存関係を使用する場合、moduleA がピア依存関係として moduleB を require しようとすると、デフォルトの動作によって例外がスローされます。

{appDir}
 ├── app
 │   ├── index.js
 │   └── node_modules
 │       ├── moduleA -> {appDir}/moduleA
 │       └── moduleB
 │           ├── index.js
 │           └── package.json
 └── moduleA
     ├── index.js
     └── package.json 

--preserve-symlinks コマンドラインフラグは、Node.js に実パスではなくモジュールのシンボリックリンクパスを使用するように指示し、シンボリックリンクされたピア依存関係が見つかるようにします。

ただし、--preserve-symlinks を使用すると、他の副作用が生じる可能性があることに注意してください。特に、シンボリックリンクされたネイティブモジュールが依存関係ツリー内の複数の場所からリンクされている場合、ロードに失敗する可能性があります(Node.js はそれらを 2 つの別個のモジュールと見なし、モジュールを複数回ロードしようとし、例外がスローされます)。

--preserve-symlinks フラグはメインモジュールには適用されないため、node --preserve-symlinks node_module/.bin/<foo> が機能します。メインモジュールにも同じ動作を適用するには、--preserve-symlinks-main も使用してください。

--preserve-symlinks-main#

モジュールローダーに、メインモジュール(require.main)を解決およびキャッシュする際にシンボリックリンクを保持するように指示します。

このフラグは、メインモジュールが --preserve-symlinks が他のすべてのインポートに与える動作と同じ動作を選択できるようにするために存在します。ただし、古いバージョンの Node.js との下位互換性を保つために、これらは別個のフラグです。

--preserve-symlinks-main--preserve-symlinks を暗示するものではありません。相対パスを解決する前にシンボリックリンクをたどらないことが望ましい場合は、--preserve-symlinks に加えて --preserve-symlinks-main を使用してください。

詳細については、--preserve-symlinks を参照してください。

-p, --print "script"#

-e と同じですが、結果を出力します。

--prof#

V8 プロファイラーの出力を生成します。

--prof-process#

V8 オプション --prof を使用して生成された V8 プロファイラーの出力を処理します。

--redirect-warnings=file#

stderr に出力する代わりに、プロセスの警告を指定されたファイルに書き込みます。ファイルが存在しない場合は作成され、存在する場合は追加されます。ファイルを書き込もうとしてエラーが発生した場合、代わりに警告が stderr に書き込まれます。

file 名は絶対パスでもかまいません。そうでない場合は、書き込まれるデフォルトのディレクトリは --diagnostic-dir コマンドラインオプションによって制御されます。

--report-compact#

人間が消費できるように設計されたデフォルトの複数行形式よりも、ログ処理システムでより簡単に消費できる、コンパクトな形式、単一行 JSON でレポートを書き込みます。

--report-dir=directory, report-directory=directory#

レポートが生成される場所。

--report-filename=filename#

レポートが書き込まれるファイルの名前。

ファイル名が 'stdout' または 'stderr' に設定されている場合、レポートはそれぞれプロセスの stdout または stderr に書き込まれます。

--report-on-fatalerror#

アプリケーションの終了につながる致命的なエラー(メモリ不足など、Node.js ランタイム内の内部エラー)が発生した場合にレポートをトリガーできるようにします。ヒープ、スタック、イベントループの状態、リソース消費など、さまざまな診断データ要素を検査して、致命的なエラーの原因を推論するのに役立ちます。

--report-on-signal#

実行中の Node.js プロセスに、指定された(または定義済みの)シグナルを受信したときにレポートを生成できるようにします。レポートをトリガーするシグナルは --report-signal で指定されます。

--report-signal=signal#

レポート生成のシグナルを設定またはリセットします(Windows ではサポートされていません)。デフォルトのシグナルは SIGUSR2 です。

--report-uncaught-exception#

プロセスがキャッチされない例外が原因で終了したときに、レポートを生成できるようにします。ネイティブスタックやその他のランタイム環境データと組み合わせて JavaScript スタックを検査する場合に役立ちます。

-r, --require module#

起動時に指定されたモジュールをプリロードします。

require() のモジュール解決ルールに従います。module はファイルへのパス、またはノードモジュール名です。

CommonJS モジュールのみがサポートされています。--import を使用して ECMAScript モジュール をプリロードします。--require でプリロードされたモジュールは、--import でプリロードされたモジュールよりも前に実行されます。

--secure-heap=n#

n バイトの OpenSSL セキュアヒープを初期化します。初期化されると、セキュアヒープは、キー生成やその他の操作中に OpenSSL 内の選択されたタイプの割り当てに使用されます。これは、例えば、ポインタのオーバーランまたはアンダーランによって機密情報が漏洩するのを防ぐのに役立ちます。

セキュアヒープは固定サイズであり、実行時にサイズ変更できないため、使用する場合は、すべてのアプリケーションの使用をカバーするのに十分な大きさのヒープを選択することが重要です。

指定されたヒープサイズは 2 のべき乗である必要があります。2 未満の値はセキュアヒープを無効にします。

セキュアヒープはデフォルトで無効になっています。

セキュアヒープは Windows では利用できません。

詳細については、CRYPTO_secure_malloc_init を参照してください。

--secure-heap-min=n#

--secure-heap を使用する場合、--secure-heap-min フラグはセキュアヒープからの最小割り当てを指定します。最小値は 2 です。最大値は、--secure-heap または 2147483647 のうち小さい方です。指定された値は 2 のべき乗である必要があります。

--snapshot-blob=path#

安定性: 1 - 実験的

--build-snapshot と一緒に使用する場合、--snapshot-blob は、生成されたスナップショット BLOB が書き込まれるパスを指定します。指定しない場合、生成された BLOB は現在の作業ディレクトリの snapshot.blob に書き込まれます。

--build-snapshot なしで使用する場合、--snapshot-blob は、アプリケーションの状態を復元するために使用される BLOB へのパスを指定します。

スナップショットをロードするとき、Node.js は以下を確認します。

  1. 実行中の Node.js バイナリのバージョン、アーキテクチャ、およびプラットフォームが、スナップショットを生成するバイナリと完全に同じであること。
  2. V8 フラグと CPU 機能が、スナップショットを生成するバイナリと互換性があること。

一致しない場合、Node.js はスナップショットのロードを拒否し、ステータスコード 1 で終了します。

--test#

Node.js コマンドラインテストランナーを開始します。このフラグは、--watch-path--check--eval--interactive、またはインスペクターと組み合わせることはできません。詳細については、コマンドラインからのテストの実行に関するドキュメントを参照してください。

--test-concurrency#

テストランナー CLI が同時に実行するテストファイルの最大数。デフォルト値は os.availableParallelism() - 1 です。

--test-name-pattern#

提供されたパターンと名前が一致するテストのみを実行するようにテストランナーを構成する正規表現。詳細については、名前によるテストのフィルタリングに関するドキュメントを参照してください。

--test-only#

only オプションが設定されているトップレベルテストのみを実行するようにテストランナーを構成します。

--test-reporter#

テストを実行するときに使用するテストレポーター。テストレポーターに関するドキュメントを参照してください。

--test-reporter-destination#

対応するテストレポーターの出力先。テストレポーターに関するドキュメントを参照してください。

--test-shard#

<index>/<total> の形式で実行するテストスイートシャード。ここで、

index は正の整数で、分割された部分のインデックスです。total は正の整数で、分割された部分の合計です。このコマンドは、すべてのテストファイルを total 個の等しい部分に分割し、index の部分に該当するテストのみを実行します。

たとえば、テストスイートを3つの部分に分割するには、次のように使用します。

node --test --test-shard=1/3
node --test --test-shard=2/3
node --test --test-shard=3/3 

--test-timeout#

テストの実行が失敗するまでのミリ秒数。未指定の場合、サブテストはこの値を親から継承します。デフォルト値は Infinity です。

--throw-deprecation#

非推奨に関するエラーをスローします。

--title=title#

起動時に process.title を設定します。

--tls-cipher-list=list#

代替のデフォルトTLS暗号リストを指定します。Node.jsが暗号化サポート(デフォルト)付きでビルドされている必要があります。

--tls-keylog=file#

TLSキーマテリアルをファイルに記録します。キーマテリアルはNSS SSLKEYLOGFILE 形式であり、TLSトラフィックを復号化するためにソフトウェア(Wiresharkなど)で使用できます。

--tls-max-v1.2#

tls.DEFAULT_MAX_VERSION を 'TLSv1.2' に設定します。TLSv1.3のサポートを無効にするために使用します。

--tls-max-v1.3#

デフォルトの tls.DEFAULT_MAX_VERSION を 'TLSv1.3' に設定します。TLSv1.3のサポートを有効にするために使用します。

--tls-min-v1.0#

デフォルトの tls.DEFAULT_MIN_VERSION を 'TLSv1' に設定します。古いTLSクライアントまたはサーバーとの互換性のために使用します。

--tls-min-v1.1#

デフォルトの tls.DEFAULT_MIN_VERSION を 'TLSv1.1' に設定します。古いTLSクライアントまたはサーバーとの互換性のために使用します。

--tls-min-v1.2#

デフォルトの tls.DEFAULT_MIN_VERSION を 'TLSv1.2' に設定します。これは12.x以降のデフォルトですが、古いNode.jsバージョンとの互換性のためにオプションがサポートされています。

--tls-min-v1.3#

デフォルトの tls.DEFAULT_MIN_VERSION を 'TLSv1.3' に設定します。TLSv1.3ほど安全ではないTLSv1.2のサポートを無効にするために使用します。

--trace-atomics-wait#

安定性: 0 - 非推奨

Atomics.wait() の呼び出しに関する簡単な要約をstderrに出力します。出力は次のようになります。

(node:15701) [Thread 0] Atomics.wait(&lt;address> + 0, 1, inf) started
(node:15701) [Thread 0] Atomics.wait(&lt;address> + 0, 1, inf) did not wait because the values mismatched
(node:15701) [Thread 0] Atomics.wait(&lt;address> + 0, 0, 10) started
(node:15701) [Thread 0] Atomics.wait(&lt;address> + 0, 0, 10) timed out
(node:15701) [Thread 0] Atomics.wait(&lt;address> + 4, 0, inf) started
(node:15701) [Thread 1] Atomics.wait(&lt;address> + 4, -1, inf) started
(node:15701) [Thread 0] Atomics.wait(&lt;address> + 4, 0, inf) was woken up by another thread
(node:15701) [Thread 1] Atomics.wait(&lt;address> + 4, -1, inf) was woken up by another thread 

ここでのフィールドは、次のものに対応します。

  • worker_threads.threadId によって与えられるスレッドID
  • 問題の SharedArrayBuffer のベースアドレス、および Atomics.wait() に渡されたインデックスに対応するバイトオフセット
  • Atomics.wait() に渡された期待値
  • Atomics.wait に渡されたタイムアウト

--trace-deprecation#

非推奨のスタックトレースを出力します。

--trace-event-categories#

--trace-events-enabled を使用してトレースイベントトレースが有効になっている場合にトレースする必要があるカテゴリのコンマ区切りリスト。

--trace-event-file-pattern#

トレースイベントデータのファイルパスを指定するテンプレート文字列。${rotation} および ${pid} をサポートしています。

--trace-events-enabled#

トレースイベントトレース情報の収集を有効にします。

--trace-exit#

環境が積極的に終了したとき、つまり process.exit() を呼び出したときに、スタックトレースを出力します。

--trace-sigint#

SIGINTでスタックトレースを出力します。

--trace-sync-io#

イベントループの最初のターン後に同期I/Oが検出されるたびにスタックトレースを出力します。

--trace-tls#

TLSパケットトレース情報を stderr に出力します。これは、TLS接続の問題をデバッグするために使用できます。

--trace-uncaught#

キャッチされない例外のスタックトレースを出力します。通常、Error の作成に関連付けられたスタックトレースが出力されますが、これにより、Node.jsは値のスローに関連付けられたスタックトレース(Error インスタンスである必要はありません)も出力します。

このオプションを有効にすると、ガベージコレクションの動作に悪影響を与える可能性があります。

--trace-warnings#

プロセスの警告(非推奨を含む)のスタックトレースを出力します。

--track-heap-objects#

ヒープスナップショットのためにヒープオブジェクトの割り当てを追跡します。

--unhandled-rejections=mode#

このフラグを使用すると、キャッチされないリジェクションが発生したときに何が起こるかを変更できます。次のモードのいずれかを選択できます。

  • throw: unhandledRejection を出力します。このフックが設定されていない場合は、キャッチされないリジェクションをキャッチされない例外として発生させます。これがデフォルトです。
  • strict: キャッチされないリジェクションをキャッチされない例外として発生させます。例外が処理された場合、unhandledRejection が出力されます。
  • warn: unhandledRejection フックが設定されているかどうかに関係なく、常に警告をトリガーしますが、非推奨の警告は出力しません。
  • warn-with-error-code: unhandledRejection を出力します。このフックが設定されていない場合は、警告をトリガーし、プロセスの終了コードを1に設定します。
  • none: すべての警告を抑制します。

コマンドラインエントリポイントのESモジュール静的ロードフェーズ中にリジェクションが発生した場合、常にキャッチされない例外として発生させます。

--use-bundled-ca, --use-openssl-ca#

現在のNode.jsバージョンで提供されるバンドルされたMozilla CAストアを使用するか、OpenSSLのデフォルトCAストアを使用します。デフォルトのストアはビルド時に選択可能です。

Node.jsによって提供されるバンドルされたCAストアは、リリース時に固定されるMozilla CAストアのスナップショットです。これは、サポートされているすべてのプラットフォームで同一です。

OpenSSLストアを使用すると、ストアの外部変更が可能になります。ほとんどのLinuxおよびBSDディストリビューションの場合、このストアはディストリビューションのメンテナーおよびシステム管理者によって管理されます。OpenSSL CAストアの場所はOpenSSLライブラリの構成に依存しますが、環境変数を使用して実行時に変更できます。

SSL_CERT_DIR および SSL_CERT_FILE を参照してください。

--use-largepages=mode#

起動時にNode.jsの静的コードを大きなメモリページに再マップします。ターゲットシステムでサポートされている場合、これにより、Node.jsの静的コードが4 KiBページではなく2 MiBページに移動します。

mode には次の値が有効です。

  • off: マッピングは試行されません。これがデフォルトです。
  • on: OSでサポートされている場合、マッピングが試行されます。マッピングの失敗は無視され、標準エラーにメッセージが出力されます。
  • silent: OSでサポートされている場合、マッピングが試行されます。マッピングの失敗は無視され、報告されません。

--v8-options#

V8コマンドラインオプションを出力します。

--v8-pool-size=num#

バックグラウンドジョブの割り当てに使用されるV8のスレッドプールサイズを設定します。

0 に設定すると、Node.jsは並列処理量の推定に基づいてスレッドプールの適切なサイズを選択します。

並列処理の度合いとは、特定のマシンで同時に実行できる計算の数を指します。一般的にはCPUの数と同じですが、VMやコンテナなどの環境では異なる場合があります。

-v, --version#

Nodeのバージョンを表示します。

--watch#

安定性: 1 - 実験的

Node.jsをウォッチモードで起動します。ウォッチモードでは、監視対象ファイルの変更があるとNode.jsプロセスが再起動されます。デフォルトでは、ウォッチモードはエントリポイントと、requireまたはimportされたすべてのモジュールを監視します。監視するパスを指定するには、--watch-pathを使用してください。

このフラグは、--check--eval--interactive、またはREPLと組み合わせて使用することはできません。

node --watch index.js 

--watch-path#

安定性: 1 - 実験的

Node.jsをウォッチモードで起動し、監視するパスを指定します。ウォッチモードでは、監視対象パスの変更があるとNode.jsプロセスが再起動されます。これにより、--watchと組み合わせて使用した場合でも、requireまたはimportされたモジュールの監視は無効になります。

このフラグは、--check--eval--interactive--test、またはREPLと組み合わせて使用することはできません。

node --watch-path=./src --watch-path=./tests index.js 

このオプションは、macOSとWindowsでのみサポートされています。このオプションをサポートしていないプラットフォームで使用すると、ERR_FEATURE_UNAVAILABLE_ON_PLATFORM例外がスローされます。

--watch-preserve-output#

ウォッチモードでプロセスが再起動するときに、コンソールをクリアしないようにします。

node --watch --watch-preserve-output test.js 

--zero-fill-buffers#

新しく割り当てられたすべてのBufferSlowBufferインスタンスを自動的にゼロで埋めます。

環境変数#

FORCE_COLOR=[1, 2, 3]#

FORCE_COLOR環境変数は、ANSIカラー出力の有効化に使用されます。値は以下のいずれかです。

  • 1true、または空文字列''は16色サポートを示し、
  • 2は256色サポートを示し、
  • 3は1600万色サポートを示します。

FORCE_COLORが使用され、サポートされている値に設定されている場合、NO_COLORNODE_DISABLE_COLORSの両方の環境変数が無視されます。

その他の値は、カラー出力が無効になります。

NO_COLOR=<any>#

NO_COLORNODE_DISABLE_COLORSのエイリアスです。環境変数の値は任意です。

NODE_DEBUG=module[,…]#

デバッグ情報を出力するコアモジュールの','区切りリスト。

NODE_DEBUG_NATIVE=module[,…]#

デバッグ情報を出力するコアC++モジュールの','区切りリスト。

NODE_DISABLE_COLORS=1#

設定すると、REPLで色が使用されなくなります。

NODE_EXTRA_CA_CERTS=file#

設定すると、よく知られた「ルート」CA(VeriSignなど)が、file内の追加証明書で拡張されます。ファイルは、PEM形式の1つ以上の信頼できる証明書で構成されている必要があります。ファイルが見つからないか形式が正しくない場合は、process.emitWarning()で(1回)メッセージが出力されますが、その他のエラーは無視されます。

TLSまたはHTTPSクライアントまたはサーバーでcaオプションプロパティが明示的に指定されている場合、既知の証明書も追加の証明書も使用されません。

この環境変数は、nodeがsetuid rootとして実行されているか、Linuxファイル機能が設定されている場合は無視されます。

NODE_EXTRA_CA_CERTS環境変数は、Node.jsプロセスが最初に起動されたときにのみ読み取られます。実行時にprocess.env.NODE_EXTRA_CA_CERTSを使用して値を変更しても、現在のプロセスには影響しません。

NODE_ICU_DATA=file#

ICU(Intlオブジェクト)データへのデータパス。small-icuサポートでコンパイルされている場合、リンクされたデータを拡張します。

NODE_NO_WARNINGS=1#

1に設定すると、プロセスの警告は抑制されます。

NODE_OPTIONS=options...#

コマンドラインオプションのスペース区切りリスト。options...はコマンドラインオプションの前に解釈されるため、コマンドラインオプションはoptions...内のものよりも優先または合成されます。環境で許可されていないオプション(-pやスクリプトファイルなど)が使用された場合、Node.jsはエラーで終了します。

オプションの値にスペースが含まれている場合は、二重引用符を使用してエスケープできます

NODE_OPTIONS='--require "./my path/file.js"' 

コマンドラインオプションとして渡されたシングルトンフラグは、NODE_OPTIONSに渡された同じフラグを上書きします

# The inspector will be available on port 5555
NODE_OPTIONS='--inspect=localhost:4444' node --inspect=localhost:5555 

複数回渡すことができるフラグは、NODE_OPTIONSのインスタンスが最初に渡され、その後にコマンドラインのインスタンスが渡されたかのように処理されます

NODE_OPTIONS='--require "./a.js"' node --require "./b.js"
# is equivalent to:
node --require "./a.js" --require "./b.js" 

許可されているNode.jsオプションは次のとおりです

  • --allow-addons
  • --allow-child-process
  • --allow-fs-read
  • --allow-fs-write
  • --allow-worker
  • --conditions, -C
  • --diagnostic-dir
  • --disable-proto
  • --disable-warning
  • --dns-result-order
  • --enable-fips
  • --enable-network-family-autoselection
  • --enable-source-maps
  • --experimental-abortcontroller
  • --experimental-default-type
  • --experimental-detect-module
  • --experimental-import-meta-resolve
  • --experimental-json-modules
  • --experimental-loader
  • --experimental-modules
  • --experimental-network-imports
  • --experimental-permission
  • --experimental-policy
  • --experimental-shadow-realm
  • --experimental-specifier-resolution
  • --experimental-top-level-await
  • --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
  • --heapsnapshot-near-heap-limit
  • --heapsnapshot-signal
  • --http-parser
  • --icu-data-dir
  • --import
  • --input-type
  • --insecure-http-parser
  • --inspect-brk
  • --inspect-port, --debug-port
  • --inspect-publish-uid
  • --inspect
  • --max-http-header-size
  • --napi-modules
  • --no-addons
  • --no-deprecation
  • --no-experimental-fetch
  • --no-experimental-global-customevent
  • --no-experimental-global-navigator
  • --no-experimental-global-webcrypto
  • --no-experimental-repl-await
  • --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
  • --openssl-legacy-provider
  • --openssl-shared-config
  • --pending-deprecation
  • --policy-integrity
  • --preserve-symlinks-main
  • --preserve-symlinks
  • --prof-process
  • --redirect-warnings
  • --report-compact
  • --report-dir, --report-directory
  • --report-filename
  • --report-on-fatalerror
  • --report-on-signal
  • --report-signal
  • --report-uncaught-exception
  • --require, -r
  • --secure-heap-min
  • --secure-heap
  • --snapshot-blob
  • --test-only
  • --test-reporter-destination
  • --test-reporter
  • --test-shard
  • --throw-deprecation
  • --title
  • --tls-cipher-list
  • --tls-keylog
  • --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-sigint
  • --trace-sync-io
  • --trace-tls
  • --trace-uncaught
  • --trace-warnings
  • --track-heap-objects
  • --unhandled-rejections
  • --use-bundled-ca
  • --use-largepages
  • --use-openssl-ca
  • --v8-pool-size
  • --watch-path
  • --watch-preserve-output
  • --watch
  • --zero-fill-buffers

許可されているV8オプションは次のとおりです

  • --abort-on-uncaught-exception
  • --disallow-code-generation-from-strings
  • --enable-etw-stack-walking
  • --huge-max-old-generation-size
  • --interpreted-frames-native-stack
  • --jitless
  • --max-old-space-size
  • --max-semi-space-size
  • --perf-basic-prof-only-functions
  • --perf-basic-prof
  • --perf-prof-unwinding-info
  • --perf-prof
  • --stack-trace-limit

--perf-basic-prof-only-functions--perf-basic-prof--perf-prof-unwinding-info、および--perf-profはLinuxでのみ利用可能です。

--enable-etw-stack-walkingはWindowsでのみ利用可能です。

NODE_PATH=path[:…]#

モジュール検索パスの前に付加されるディレクトリの':'区切りリスト。

Windowsでは、代わりに';'区切りリストです。

NODE_PENDING_DEPRECATION=1#

1に設定すると、保留中の非推奨警告が出力されます。

保留中の非推奨は、一般的にランタイム非推奨と同じですが、注目すべき例外として、デフォルトでオフになっており、--pending-deprecationコマンドラインフラグまたはNODE_PENDING_DEPRECATION=1環境変数が設定されていない限り発行されません。保留中の非推奨は、開発者が非推奨のAPI使用を検出するために利用できる、一種の選択的な「早期警告」メカニズムを提供するために使用されます。

NODE_PENDING_PIPE_INSTANCES=instances#

パイプサーバーが接続を待機しているときに、保留中のパイプインスタンスハンドルの数を設定します。この設定はWindowsにのみ適用されます。

NODE_PRESERVE_SYMLINKS=1#

1に設定すると、モジュールローダーに、モジュールを解決およびキャッシュするときにシンボリックリンクを保持するように指示します。

NODE_REDIRECT_WARNINGS=file#

設定すると、プロセスの警告はstderrに出力する代わりに、指定されたファイルに出力されます。ファイルが存在しない場合は作成され、存在する場合は追記されます。ファイルへの警告の書き込み中にエラーが発生した場合、警告は代わりにstderrに書き込まれます。これは、--redirect-warnings=fileコマンドラインフラグを使用することと同等です。

NODE_REPL_EXTERNAL_MODULE=file#

組み込みREPLの代わりにロードされるNode.jsモジュールへのパス。この値を空文字列('')で上書きすると、組み込みREPLが使用されます。

NODE_REPL_HISTORY=file#

永続的なREPL履歴の保存に使用されるファイルへのパス。デフォルトのパスは~/.node_repl_historyですが、この変数で上書きされます。値を空文字列(''または' ')に設定すると、永続的なREPL履歴が無効になります。

NODE_SKIP_PLATFORM_CHECK=value#

value'1'と等しい場合、Node.jsの起動時にサポートされているプラットフォームのチェックがスキップされます。Node.jsが正しく実行されない可能性があります。サポートされていないプラットフォームで発生した問題は修正されません。

NODE_TEST_CONTEXT=value#

value'child' の場合、テストレポーターのオプションは上書きされ、テスト出力は TAP 形式で標準出力に送信されます。他の値が提供された場合、Node.js は使用されるレポーター形式やその安定性について保証しません。

NODE_TLS_REJECT_UNAUTHORIZED=value#

value'0' の場合、TLS 接続の証明書検証が無効になります。これにより、TLS、ひいては HTTPS が安全でなくなります。この環境変数の使用は強く推奨されません。

NODE_V8_COVERAGE=dir#

設定すると、Node.js は V8 JavaScript コードカバレッジソースマップ のデータを、引数として提供されたディレクトリに出力し始めます(カバレッジ情報は、coverage というプレフィックスが付いた JSON ファイルとして書き込まれます)。

NODE_V8_COVERAGE は自動的にサブプロセスに伝播するため、child_process.spawn() ファミリーの関数を呼び出すアプリケーションを計測しやすくなります。NODE_V8_COVERAGE を空文字列に設定すると、伝播を防止できます。

カバレッジ出力#

カバレッジは、トップレベルのキー result に、ScriptCoverage オブジェクトの配列として出力されます。

{
  "result": [
    {
      "scriptId": "67",
      "url": "internal/tty.js",
      "functions": []
    }
  ]
} 
ソースマップキャッシュ#

安定性: 1 - 実験的

ソースマップデータが見つかった場合、JSON カバレッジオブジェクトのトップレベルキー source-map-cache に追加されます。

source-map-cache は、ソースマップが抽出されたファイルを表すキーと、生のソースマップ URL(キー url)、解析されたソースマップ v3 情報(キー data)、およびソースファイルの行の長さ(キー lineLengths)を含む値を持つオブジェクトです。

{
  "result": [
    {
      "scriptId": "68",
      "url": "file:///absolute/path/to/source.js",
      "functions": []
    }
  ],
  "source-map-cache": {
    "file:///absolute/path/to/source.js": {
      "url": "./path-to-map.json",
      "data": {
        "version": 3,
        "sources": [
          "file:///absolute/path/to/original.js"
        ],
        "names": [
          "Foo",
          "console",
          "info"
        ],
        "mappings": "MAAMA,IACJC,YAAaC",
        "sourceRoot": "./"
      },
      "lineLengths": [
        13,
        62,
        38,
        27
      ]
    }
  }
} 

OPENSSL_CONF=file#

起動時に OpenSSL 設定ファイルをロードします。他の用途の中でも、Node.js が ./configure --openssl-fips でビルドされている場合、これにより FIPS 準拠の暗号化を有効にできます。

--openssl-config コマンドラインオプションが使用されている場合、この環境変数は無視されます。

SSL_CERT_DIR=dir#

--use-openssl-ca が有効な場合、これは信頼された証明書を含む OpenSSL のディレクトリを上書きして設定します。

子環境が明示的に設定されていない限り、この環境変数はすべての子プロセスに継承され、OpenSSL を使用している場合、Node と同じ CA を信頼してしまう可能性があることに注意してください。

SSL_CERT_FILE=file#

--use-openssl-ca が有効な場合、これは信頼された証明書を含む OpenSSL のファイルを上書きして設定します。

子環境が明示的に設定されていない限り、この環境変数はすべての子プロセスに継承され、OpenSSL を使用している場合、Node と同じ CA を信頼してしまう可能性があることに注意してください。

TZ#

TZ 環境変数は、タイムゾーン構成を指定するために使用されます。

Node.js は、他の環境で TZ が処理されるさまざまな 方法 のすべてをサポートしていませんが、基本的な タイムゾーン ID'Etc/UTC''Europe/Paris''America/New_York' など)をサポートしています。いくつかの他の略語やエイリアスをサポートする場合がありますが、これらは強く推奨されず、保証されていません。

$ TZ=Europe/Dublin node -pe "new Date().toString()"
Wed May 12 2021 20:30:48 GMT+0100 (Irish Standard Time) 

UV_THREADPOOL_SIZE=size#

libuv のスレッドプールで使用されるスレッド数を size スレッドに設定します。

非同期システム API は、可能な限り Node.js で使用されますが、存在しない場合は、libuv のスレッドプールを使用して、同期システム API に基づいた非同期 Node API が作成されます。スレッドプールを使用する Node.js API は次のとおりです。

  • ファイルウォッチャー API と明示的に同期する API を除く、すべての fs API
  • crypto.pbkdf2()crypto.scrypt()crypto.randomBytes()crypto.randomFill()crypto.generateKeyPair() などの非同期暗号 API
  • dns.lookup()
  • 明示的に同期するものを除く、すべての zlib API

libuv のスレッドプールには固定サイズがあるため、これらの API のいずれかが何らかの理由で長時間かかる場合、libuv のスレッドプールで実行される他の(無関係に見える)API のパフォーマンスが低下します。この問題を軽減するために、考えられる解決策の 1 つは、'UV_THREADPOOL_SIZE' 環境変数を 4(現在のデフォルト値)よりも大きい値に設定して、libuv のスレッドプールのサイズを大きくすることです。詳細については、libuv スレッドプールのドキュメントを参照してください。

UV_USE_IO_URING=value#

サポートされているプラットフォームで、libuv の io_uring の使用を有効または無効にします。

サポートされているプラットフォームでは、io_uring により、さまざまな非同期 I/O 操作のパフォーマンスを大幅に向上させることができます。

セキュリティ上の懸念から、io_uring はデフォルトで無効になっています。io_uring が有効になっている場合、アプリケーションは実行時にプロセスのユーザーIDを変更してはなりません。この場合、process.setuid() などの JavaScript 関数は利用できず、ネイティブアドオンは setuid(2) などのシステム関数を呼び出してはなりません。

この環境変数は Node.js の依存関係によって実装されており、将来の Node.js バージョンで削除される可能性があります。この環境変数の動作については、安定性の保証は提供されていません。

役立つ V8 オプション#

V8 には独自の CLI オプションのセットがあります。node に提供された V8 CLI オプションはすべて、処理するために V8 に渡されます。V8 のオプションには安定性の保証はありません。V8 チーム自体は、それらを正式な API の一部とは考えておらず、いつでも変更する権利を留保しています。同様に、Node.js の安定性保証の対象外です。V8 オプションの多くは、V8 開発者のみが関心を持っています。それにもかかわらず、Node.js に広く適用できる V8 オプションの小さなセットがあり、ここに文書化されています。

--max-old-space-size=SIZE (メガバイト単位)#

V8 の古いメモリセクションの最大メモリサイズを設定します。メモリ消費量が制限に近づくと、V8 は未使用メモリを解放するためにガベージコレクションにより多くの時間を費やします。

2 GiB のメモリを搭載したマシンでは、他の用途のためにメモリを残し、スワップを避けるために、これを 1536 (1.5 GiB) に設定することを検討してください。

node --max-old-space-size=1536 index.js 

--max-semi-space-size=SIZE (メガバイト単位)#

V8 の スカベンジガベージコレクターの最大セミスペースサイズを MiB (メガバイト) 単位で設定します。セミスペースの最大サイズを大きくすると、メモリ消費量は増えますが、Node.js のスループットが向上する可能性があります。

V8 ヒープの若い世代サイズはセミスペースのサイズの 3 倍であるため (V8 の YoungGenerationSizeFromSemiSpaceSize を参照)、セミスペースへの 1 MiB の増加は、3 つの個々のセミスペースのそれぞれに適用され、ヒープサイズが 3 MiB 増加します。スループットの向上は、ワークロードによって異なります (#42511 を参照)。

デフォルト値は、64 ビットシステムでは 16 MiB、32 ビットシステムでは 8 MiB です。アプリケーションに最適な構成を得るには、アプリケーションのベンチマークを実行するときに、さまざまな max-semi-space-size 値を試す必要があります。

例: 64 ビットシステムでのベンチマーク

for MiB in 16 32 64 128; do
    node --max-semi-space-size=$MiB index.js
done