commonJS -- require

require命令用於加載文件,後綴名默認爲.jsnode

var foo = require('foo');
//  等同於
var foo = require('foo.js');

根據參數的不一樣格式,require命令去不一樣路徑尋找模塊文件。json

(1)若是參數字符串以「/」開頭,則表示加載的是一個位於絕對路徑的模塊文件。好比,require('/home/marco/foo.js')將加載/home/marco/foo.jsui

(2)若是參數字符串以「./」開頭,則表示加載的是一個位於相對路徑(跟當前執行腳本的位置相比)的模塊文件。好比,require('./circle')將加載當前腳本同一目錄的circle.jsspa

(3)若是參數字符串不以「./「或」/「開頭,則表示加載的是一個默認提供的核心模塊(位於Node的系統安裝目錄中),或者一個位於各級node_modules目錄的已安裝模塊(全局安裝或局部安裝)。設計

舉例來講,腳本/home/user/projects/foo.js執行了require('bar.js')命令,Node會依次搜索如下文件。code

  • /usr/local/lib/node/bar.js
  • /home/user/projects/node_modules/bar.js
  • /home/user/node_modules/bar.js
  • /home/node_modules/bar.js
  • /node_modules/bar.js

這樣設計的目的是,使得不一樣的模塊能夠將所依賴的模塊本地化。blog

(4)若是參數字符串不以「./「或」/「開頭,並且是一個路徑,好比require('example-module/path/to/file'),則將先找到example-module的位置,而後再以它爲參數,找到後續路徑。ip

(5)若是指定的模塊文件沒有發現,Node會嘗試爲文件名添加.js.json.node後,再去搜索。.js件會以文本格式的JavaScript腳本文件解析,.json文件會以JSON格式的文本文件解析,.node文件會以編譯後的二進制文件解析。ci

(6)若是想獲得require命令加載的確切文件名,使用require.resolve()方法。字符串

相關文章
相關標籤/搜索