久しぶりに 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.js
で require('./libs/foo')
で読み込ませていた。require
で読み込むファイルの拡張子を省略できていた。foo.js
について拡張子はこのまま使うなら良いのだけど、foo.js
を foo.cjs
にすると require
の引数で拡張子は省略できなくなる(VS Code のエクスプローラーで foo.js
の名前を foo.cjs
に変更すると、index.js
の中の require
の引数を拡張子付きに変更するか聞いてきた)。
古いモジュールのファイル名を一気に書き換えたりするときに要注意。
ES modues はこれから使い方というところなので、わかったら追記する。
コメント