npmが仕込んでくれる環境変数のNPM_PACKAGE_VERSIONなどを参照するために、CSSファイルをコンパイルするスクリプトなどがちゃんとした実行ファイルになるよう、手元で書き直していた。ES modulesで書くようにしてからrequire("../package.json")などが使えなくなったため、無理やりpackage.jsonを読んでいたのが気になったからだ。でも結局はimport.meta.urlを使って、package.jsonを読むよう、さらに書き直した。

import fs from "fs/promises";

const file = new URL("../package.json", import.meta.url);
const json = await fs.readFile(file, "utf8");
const pkg = JSON.parse(json);
console.log(`${pkg.name} v${pkg.version}`);

すでにフラグ付きで実行すればimportでJSONファイルを読める。このフラグがなくなるまでのつなぎと考えると、この方が書き直しやすそうという目算だ。環境変数を参照するやり方と違って、npm経由で実行しなくてもいいので、雑に動作を確認しやすいという利点もある。また、パーミッションのことを忘れられ、環境耐性が高いかもしれない。


こういうのも考えてくれるBabelの逆、みたいなものが欲しい。昔のやり方で書いていたら、今風に修正してくれるようなものだ。配列や文字列の新しいメソッドに書き換えてくれたりするとありがたい。startsWith()あたりにはさすがに慣れてきたが、matchAll()はまだ使い損ねる。ありそうなので探してみよう。