Closed6

「JavaScript 第7版」を読む(16章:Node.js)

suzuki-navisuzuki-navi

process.argvでコマンドライン引数を参照できる。1つ目はNodeの実行バイナリへのパス、2つ目はJavaScriptソースファイル、3つ目以降がコマンドライン引数になる。

console.log(process.argv);

実行例

$ node ./hello.js arg1 arg2
[
  '/usr/local/nodejs/bin/node',
  '/home/ec2-user/foo/hello.js',
  'arg1',
  'arg2'
]
suzuki-navisuzuki-navi

ソースファイルに書かれているコードの実行が終わり、処理待ちのイベントがなくなり、新たに呼び出される可能性のあるイベントハンドラもなくなったときに、Nodeのプロセスが終了する。これは、ブラウザでのワーカースレッドと似ている気がする。

suzuki-navisuzuki-navi

ES6のモジュール方式なのか、従来のNodeモジュール(CommonJS)なのかは、Nodeがソースコードを読み込む前に決定する必要がある。

拡張子が .mjs または .cjs であれば、拡張子に応じて決定される。

そうでない場合は package.json を探し、もし見つかって type プロパティが書かれていればそれに従う。

  • type: "module"
    • ES6モジュール
  • type: "commonjs"
    • CommonJSモジュール

設定が見つからなければ、NodeでデフォルトのCommonJSとみなす。

ES6モジュールのコードから import を使って CommonJSモジュールを読み込むことはできる。

suzuki-navisuzuki-navi

Nodeの非同期関数の多くはPromise以前からあるのでコールバックベースになっている。コールバック関数の引数の1つ目は、エラーメッセージかエラーに関するオブジェクトになっている。エラーが1つ目なのは、エラーチェックを省略されないようにするためである。

util.promisify を使って、コールバックベースのAPIをPromiseベースに変換することができる。

suzuki-navisuzuki-navi

BufferクラスはJavaScriptの型付き配列より以前に設計された。いまは型付き配列であるUint8Arrayのサブクラスになっている。

このスクラップは2023/08/01にクローズされました