CommonJS → ES modules

久しぶりに node.js というか AWS の Lambda を触ったら 18 があった。18 のファンクションを作ってみたら index.mjs と。
node.js でモジュールは CommonJS だと思っていたら、最近は ESM もサポートするっていうか、いろいろ見てみたらこっちが主流になってきているような感じがします。ものによっては ESM しかサポートしないってアラートが出るとか。
ということで ESM を使ってみたらどうなるか。

ES modules で行こうと思ったときには package.json に書くとか、node のコマンドラインオプションで指定するとかあったけど、拡張子 mjs を使うのが楽で良さそう。CommonJS の場合は拡張子は cjs になる。

で、拡張子 cjs を使ったとき、require の動作は以下のようになった。
./index.js があって、./libs/foo.js がある。このとき index.jsrequire('./libs/foo') で読み込ませていた。require で読み込むファイルの拡張子を省略できていた。foo.js について拡張子はこのまま使うなら良いのだけど、foo.jsfoo.cjs にすると require の引数で拡張子は省略できなくなる(VS Code のエクスプローラーで foo.js の名前を foo.cjs に変更すると、index.js の中の require の引数を拡張子付きに変更するか聞いてきた)。
古いモジュールのファイル名を一気に書き換えたりするときに要注意。

ES modues はこれから使い方というところなので、わかったら追記する。

コメント

タイトルとURLをコピーしました