generated at
Node
JavaScript 一般の話はそちらへ

engine
毎回書き方忘れる
^ ~ も使える
12.x みたいなのもいける
package.json
"engines": { "node": ">=12.3 <13" }

node で console.log を省略したくない
util.inspect を使う
inspect.js
const util = require("util"); console.log(util.inspect(obj, { showHidden: false, depth: null }));

Object の文字列化表現を得る
これも util.inspect

node で stacktrace を省略しない
Error.stackTraceLimit = Infinity;

Array の最後を取る
ary.pop() 破壊していいなら
ary.slice(-1)[0]

stacktrace だけ見る
console.trace() これを増やすのも Error.stracTraceLimit みればよい

npm --prefix / yarn --cwd
特定のディレクトリでタスク実行するのに便利。firebase.json とかでも使われている。
firebase.json
"hosting": { "predeploy": ["npm --prefix \"$RESOURCE_DIR\" run build"], "public": "hosting/build", ... }
yarn では --cwd である。 $ yarn --cwd build

@ から始まる npm module
@types @emotion など、名前空間だけ提供して下の階層ディレクトリが個別に npm module になっているものにつける
scoped package と呼ぶ npm-scope | npm Documentation
かっこいいからつけてるわけではない(たまにかっこいいからついているものもある)

pre & post hook
prebuild のような scripts フィールドは build の前に実行される

module.parent
module ロード側の module を取得できる
module.parent.require でメンバ増やしたり module.parent.exports で親のメンバを参照したり
module.parent.filename で名前取得したり
delete require.cache[__filename]; などしないと複数箇所から使った場合にキャシュが利用されてうまく働かない

イベントループ

fetch is not defined
たまに node 上で動かした npm module が window.fetch を期待してることがある
global.fetch = require("node-fetch");