Node.js 22 で気になる挙動があったのでメモしておく
まとめ
- 静的な順序だった雰囲気だったけど,実行時間が反映されるようになった雰囲気がある
- 単純な実行時間じゃなくて,非同期になった.というか
Node 20 / 22 で import をしてみる
$ for s in node20 node22; do \
echo "-- $s -- "; \
for i in `seq 1 10`; do \
docker compose run -v $(PWD):/app -w /app --rm $s test.js; \
done; \
done
-- node20 --
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
-- node22 --
[ 'b', 'a' ] # <= ここ
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'a', 'b' ]
[ 'b', 'a' ] # <= こk
[ 'a', 'b' ]
付録
details
compose.yml
services:
node20:
image: node:20
command: -v
node22:
image: node:22
command: -v
test.js
const results = []
const f = async () => {
await Promise.all(['a', 'b'].map(async (i) => {
await import(`./${i}.js`)
results.push(i)
return
}))
return
}
f().then(() => {
console.log(results)
})
$ wc a.js b.js
0 0 0 a.js
0 0 0 b.js
0 0 0 total
Refs