モジュール


モジュールとは

分類


コアモジュールの使用方法

大半のコアモジュール

一部: globalオブジェクトにあるもの

REPL

# いきなりosオブジェクトを使える
> os.platform()
'linux'

# コアモジュールの一覧
# これは例外的にrequire必要
> require('module').builtinModules

スクリプト

// osモジュールをロード
const os = require('os')
console.log(os.platform()) // linux

// osモジュールにどんなオブジェクト(関数など)があるか
console.log(Object.getOwnPropertyNames(os))

自作モジュール

  1. モジュール側: エクスポート
    • module.exports = オブジェクト
  2. 利用する側: インポート(ロード)
    • const 変数 = require('ファイルパス') (.jsは省略可)
    • require()の戻りはmodule.exportsのオブジェクト

モジュール側

// hello.js
// この関数をモジュール化
function 挨拶() {
  console.log('こんにちは')
}
module.exports = 挨拶
console.log('読込完了:', __filename)

利用側

const hello = require('./hello') // 読込完了: /path/to/hello.js
hello() // こんにちは

// 2回目は何も出力しない
require('./hello')

module.exports === exports

複数のオブジェクトをエクスポート

// exportsそのものではなく、そのプロパティに代入すること
exports.aaa = [1, 2, 3]
exports.bbb = (引数1) => console.log(引数1)
// module.exportsはプロパティだから代入していい
module.exports = {
  aaa: [1, 2, 3],
  bbb(引数1) {
    console.log(引数1)
  },
}
// 利用側
require('./モジュール.js').bbb(引数1)

require()による検索順番


require()の動作


ディレクトリをモジュール化: index.jsを作る

モジュール側ディレクトリ

// 例: mymodule/index.js
module.exports = {
  aaa: require('./aaa.js'),
  bbb: require('./bbb.js'),
}

利用側

require('/path/to/mymodule').aaa

node_modules/による方法

  1. 優先: コアモジュールを検索
  2. なければ、./node_modules/にあるディレクトリ(名)で検索
  3. なければ、上層のnode_modules/で見つかるまで検索

グローバルなディレクトリによる方法

以上のどこにもモジュールが見つからないとき、下記でも検索される。

  1. 環境変数NODE_PATH: :区切りで指定のディレクトリ
  2. $HOME/.node_modules/など