Node.jsとは

🔧CommonJS

サーバサイド環境など, ウェブブラウザ以外のJavaScriptの仕様を策定することを目的としたプロジェクト. 元々はServerJSだったがCommonJSに改名された.

2010年代のメジャーだが, 近年のトレンドは🔖ES6に流れつつある.


module.exports

CommonJSのexport syntax.

Tools

🔧npm(nodejs)

Node.jsの🔖package manger, 🔖タスクランナー.

Node.jsのパッケージ管理システム, かつコマンドラインツールの名前(npm).

https://www.npmjs.com/

最新版nodejsをUbuntuにinstallする

# とりあえずの node.js と npm をインストール
sudo apt install -y nodejs npm
 
# n をインストール(バージョン管理)
sudo npm install n -g
 
# 最新の node.js と npm をインストール
sudo n stable
 
# 最初に入れたとりあえずの node.js と npm をアンインストール
 
sudo apt purge -y nodejs npm
sudo apt autoremove -y
 
# 残った node.js と npm が最新であることを確認
 
node -v
npm -v
 
# 他のバージョンをインストールする/切り替える
sudo n stable		# stable のバージョン
sudo n latest		# latest のバージョン
sudo n 18.15.04	# v18.15.0

特定のモジュールupdate

npm install <モジュール名>@latest

packages.json

npmの設定ファイル.

🔧npx

npm package runner.

npmレジストリに公開されているコマンドやスクリプトをローカルにインストールすることなく実行できるツール.

🔧pnpm

2023に登場した新手のpackage manager.

https://pnpm.io/

logging library

  • js/console.log
  • bunyan
  • winstonn

🔧trentm/node-bunyan

Nodejsに特化したライブラリ.

🔧pinojs/pino

ファイル出力するには?

loggingオブジェクト生成時にdest optionで指定.

ワンラインのログとして表示するには?(pino-pretty)

pinoのlogのoutputはJSONLで出力される. これをperseしてワンラインのログとして表示する CLIツール.

$ node index.js | npx pino-pretty

debug出力するには

loggerの生成時にlog_levelをdebugに 指定する.

高速なpino-debugという追加のモジュールもある(ES6未対応, CommonJSのみ).

ログをローテーションするには?

logrotateという外部ツールをつかう.

schedular

node-schedule

https://github.com/node-schedule/node-schedule

Web development

rate limitter

🔖Rate limit

Nodejs Debugs

node —inspectで起動する必要がある.

デバッグ - 入門 | Node.js

js/console.log

print debug.

Node.js with DevTools

🔧Devtools連携.

Node.js with VSCode

https://code.visualstudio.com/docs/nodejs/nodejs-debugging

CLIからファイル単位実行

require.main = moduleの判定をすると、CLIから実行されたときのみ動く.

if (require.main === module) {
  //
}

nodejsからのHTTP リクエストをweb開発のようにプロファイルするには?

外部ツールの🔖HTTP debuggerをつかう.


  • 🔧HTTP Toolkitを試したらなかなか良かった. <2023-09-16 Sat 16:08>

💡nodejsのPromise catch書き忘れをグローバルエラーハンドラで補足

nodejsのpromise処理で, catchを書き忘れると

  • promise処理ないの例外発生はuncaughtException
  • reject()された処理はunhanddleRejection

いずれもNode.jsプロセスは終了する.

グローバルエラーハンドラで補足することができる.

process.on('uncaughtException', (err) => {
    console.error('Caught exception:', err);
});
 
process.on('unhandledRejection', (reason, promise) => {
    console.error('Unhandled Rejection at:', promise, 'reason:', reason);
});

あくまでこれは一時的なデバッグ用なのでちゃんと問題箇所で例外処理を書くことがベター.

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory

nodejsのメモリ枯渇.

ヒープサイズの増加: —max-old-space-sizeオプションを使用して、Node.jsが使用するヒープメモリの上限を増やす.

$ node --max-old-space-size=4096 your-script.js

Quokka.js

Node.jsでREPL駆動開発をするツール?リアルタイムフィードバック.

https://quokkajs.com/

🔧ts-node

TypeScriptで書かれたNode.jsコードを実行. npx ts-node foo.ts

🔧Deno

Node.jsの開発者 Ryan DahlによってつくられれたNode.js後継のJS/TSランタイム.