 
   Node.js Package Mode について
目次
esm: Implement esm mode flag by guybedford · Pull Request #18392 · nodejs/node
This provides a mode: "esm" flag for package.json files which will treat ".js" files as ES modules within a given package boundary. The package boundary of a package.json file i...
Node.js Package Mode
Node.js Package Mode package.json { “mode”: “esm” }
future-of-node
Introduce the current stability 1 modules and hot topics.
まだ、master へ入っていないので、未確定です。
今は、Core で開発するか http2 の様な感じで upstream で開発するや semver の扱い等の開発指針を決めたところです。
現在の Node.js の ECMAScript Modules に対する問題点
ESM を使用する場合、現在はファイルの拡張子を.mjsにする必要があるが可能であれば、ユーザーは.jsファイルで書きたい。
Node.js Package Mode
modeフラグがesmの場合、package.json を軸に次の package.json までにネストされたフォルダとサブフォルダをすべて ESM とみなす仕様(そしてつぎ package.json のフラグがesmの場合は続く)
もし package.json がない場合は、デフォルトでcommonjsとなります。
つまり、フラグを書くことによりその package.json のフォーカスにあるプロジェクトは.jsでも ESM として扱われます。
また、これは package-mimes デザイン と同様のアルゴリズムになっています。
これによるユーザーランドの破壊的変更は存在せず、単純でビルドツールとの互換性もあります。
使い方
package.json にmodeフィールドを追加する。
.jsファイルを ESM と見てほしい場合は、以下のように書く。
このときは、ESM なのでrequireは使えない。
{  "mode": "esm"}.jsファイルを CJS と見てほしい場合は、以下のように書く。
{  "mode": "commonjs"}mjs の扱い
.mjsは CJS と ESM の両方が使われる時に使うことが理想です。
.mjs + "mode": "commonjs" の設定になります。
さいごに
ESM は今後のデファクトとなるでしょう。
その前にまだ Node.js では決めることが多くあるので、まだ安定的には長いかもしれません。
そして、これが導入されれば、npm init にmodeフラグが追加されユーザーは簡単に ESM を扱える未来がありえます。
この簡単なアプローチに自分は+1 です。(パフォーマンス低下が少し心配ですが。。)
 
   
  