require
命令用於加載文件,後綴名默認爲.js
。node
var foo = require('foo');
// 等同於
var foo = require('foo.js');
根據參數的不一樣格式,require
命令去不一樣路徑尋找模塊文件。json
(1)若是參數字符串以「/」開頭,則表示加載的是一個位於絕對路徑的模塊文件。好比,require('/home/marco/foo.js')
將加載/home/marco/foo.js
。ui
(2)若是參數字符串以「./」開頭,則表示加載的是一個位於相對路徑(跟當前執行腳本的位置相比)的模塊文件。好比,require('./circle')
將加載當前腳本同一目錄的circle.js
。spa
(3)若是參數字符串不以「./「或」/「開頭,則表示加載的是一個默認提供的核心模塊(位於Node的系統安裝目錄中),或者一個位於各級node_modules目錄的已安裝模塊(全局安裝或局部安裝)。設計
舉例來講,腳本/home/user/projects/foo.js
執行了require('bar.js')
命令,Node會依次搜索如下文件。code
這樣設計的目的是,使得不一樣的模塊能夠將所依賴的模塊本地化。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()
方法。字符串