なんとなくの雰囲気で使っていたのですが、改めて調べてみたのでメモです。
exportsとmodule.exportsの関係
- 初期状態では、
exportsはmodule.exportsを参照しており、両者は同じものを指している (exports = module.exports = {}) -
exports === module.exportsの関係が途切れるケース- module.exportsに代入した場合
- exportsに代入した場合 (e.g.
exports = 'foo') - ただし、exportsのプロパティに代入した場合は関係は途切れない (e.g.
exports.foo = 'foo')
-
require()によって最終的に評価されるのは、module.exports- そのため、常に
module.exportsを使うようにすれば混乱が少ない
- そのため、常に
require()の挙動
- ファイルの中身を実行して、
module.exportsを返す - 同一ファイルに対しては一度しか実行しない
-
引数にディレクトリを渡すと、そのディレクトリの
index.jsを実行する- そのため、index.jsをエントリポイントにして、複数ファイルを簡単に読み込める
