LoginSignup
58
49

Node.jsのrequireの検索パス

Last updated at Posted at 2018-08-04

require('hoge')で実際にどのファイルが読み込まれるのか調べたいときは

console.log(require.resolve('hoge'))とすれば絶対パスが表示される。

また、環境変数 NODE_DEBUG=module をセットしてNode.jsを実行してみるとログが表示される。

requireの検索パス

  • ./../ で始まる場合(例: require('./hoge')
    • requireが書かれているファイルからの相対パスになる。
  • ./ ../ / のいずれでも始まらない場合(例: require('fs')
    • まずコアモジュール(httpモジュールなど)が探される
    • 次にnode_modulesフォルダが探される。node_modulesフォルダを探す順番は、
      • requireが書かれているファイルがあるフォルダ
      • その親、その親…。
      • 次に下記の場所も検索される。
        • 0: $NODE_PATH$NODE_PATHを使ってモジュールの位置を指定するのは古いやり方で、現在は推奨されていない。)
        • 1: $HOME/.node_modules
        • 2: $HOME/.node_libraries
        • 3: $PREFIX/lib/node$PREFIXはNode.jsのビルド時に決定されたnode_prefix

require('hoge')のように拡張子を省略した場合

次のものが探される。

  • hoge.js
  • hoge.json
  • hoge.node
  • hogeという名前のフォルダ(package.jsonを含んでモジュール化されているもの)
  • hogeという名前のフォルダ(index.js、index.json、index.nodeのいずれかを含んでモジュール化されているもの)

参考

公式ドキュメント。requireの擬似コードも含めてとても詳しく書かれている。
https://nodejs.org/docs/v6.10.3/api/modules.html

58
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
58
49