続・CommonJS方式 exports と module.exports

CommonJS方式は、言語仕様ではなくて、JavaScript言語処理系実装が提供する機能に過ぎない(標準化されてるとしても)。この機能の主要な構成素は:

  1. モジュールコード実行中には require として見える NativeModule.require関数
  2. モジュールコード実行中には module として見えるモジュールオブジェクト(というデータ構造)

結局、NativeModule.require関数の関数仕様とモジュールオブジェクトのデータ構造仕様がわかれば、モジュールシステムが理解できる。言語仕様ではないから構文は特にない。NativeModule.require関数の呼び出しと、モジュールオブジェクトへのアクセス(読み出し/書き込み)があるだけ。

それに対して、ES2016+方式とTypeScriptモジュールは言語仕様だから、これは言語仕様として理解すべき。ただし、TypeScriptの場合はCommonJS方式にコンパイルされるから、コンパイラの挙動(という実装)も知らないといかんかも知れない。ああああ、めんどくせー。