🎃
`volta run --node=16 node ./run.js` でバージョン指定して Node を実行できる
https://github.com/sosukesuzuki/array-prototype-at-perf/ みたいな Node.js のバージョンごとにパフォーマンスが変わることが期待されるスクリプトのベンチマークをとるときに、簡単に Node.js のバージョンを切り替えつつ同じスクリプトを実行できると便利である。
もともとディレクトリを分けて package.json
を配置し、ディレクトリ単位で Volta を使って Node.js のバージョンを固定していた。
のだが、Volta のドキュメントを見ていたところ volta run
というコマンドを使えば、コマンド単位で Node.js のバージョンを指定できる。
あるスクリプト run.js
を、Node.js v16, v18, v19 で実行したいときはそれぞれ
volta run --node=16 node ./run.js
volta run --node=18 node ./run.js
volta run --node=19 node ./run.js
みたいにすれば良い。
筆者はシェルスクリプト・パワーが低いので大体なんでも Node.js でやってしまうが、こんな感じでシュッとできる。(ESMじゃないのでTLAを使ってない)
const child_process = require("node:child_process");
const util = require("node:util");
const exec = util.promisify(child_process.exec);
(async () => {
const [outputForNode16, outputForNode18, outputForNode19] = await Promise.all(
[
exec("volta run --node=16 node ./run.js").then(({ stdout }) => stdout),
exec("volta run --node=18 node ./run.js").then(({ stdout }) => stdout),
exec("volta run --node=19 node ./run.js").then(({ stdout }) => stdout),
]
);
)();
Discussion