Node.jsとは
- 🔖JavaScriptの📝サーバサイドの🔖ランタイム環境.
- のーどじぇいえすと読む.
🔧CommonJS
サーバサイド環境など, ウェブブラウザ以外のJavaScriptの仕様を策定することを目的としたプロジェクト. 元々はServerJSだったがCommonJSに改名された.
2010年代のメジャーだが, 近年のトレンドは🔖ES6に流れつつある.
module.exports
CommonJSのexport syntax.
Tools
🔧npm(nodejs)
Node.jsの🔖package manger, 🔖タスクランナー.
Node.jsのパッケージ管理システム, かつコマンドラインツールの名前(npm).
最新版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.
logging library
- js/console.log
- bunyan
- winstonn
🔧trentm/node-bunyan
Nodejsに特化したライブラリ.
🔧pinojs/pino
- repo: https://github.com/pinojs/pino/
- doc: https://getpino.io/
- notes
- pino-debugはcommonjsのみ対応.
- routate機能は未サポート.
- refs
ファイル出力するには?
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
Nodejs Debugs
node —inspectで起動する必要がある.
js/console.log
print debug.
Node.js with DevTools
🔧Devtools連携.
- 古い記事だとnode-inspectorが出てくるけどdevtoolsに組み込まれたinspectorが今は主流.
- Debugging Node.js with Chrome DevTools | by Paul Irish | Medium
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をつかう.
- https://www.google.pl/search?q=HTTP+debugger
- javascript - how to monitor the network on node.js similar to chrome/firefox developer tools? - Stack Overflow
- 🔧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駆動開発をするツール?リアルタイムフィードバック.
🔧ts-node
TypeScriptで書かれたNode.jsコードを実行. npx ts-node foo.ts
🔧Deno
Node.jsの開発者 Ryan DahlによってつくられれたNode.js後継のJS/TSランタイム.