node中使用require的時候如果路徑是一個文件夾時,或者特殊的情況require('..');require('.');
這是node實戰這本書里說的情況,但是我在node6.9版本中發現不完全是這樣,可能是后來做了修改。下面說說在6.9下require路徑的過程。
這里以require('.')說明,一個點說明要require當前目錄,這時候,node會優先查找package.json這個文件(即使有index.js這個文件也會先被忽略),然后查找package.json文件里的main鍵值對應的值xx.js,然后拿到這個值進行加載相應的文件,否則,如果沒有鍵值main或者沒有找到xx.js則開始查找當前目錄下有沒有index.js,如果有則使用,否則出錯。下面是具體的實踐:
以下文件都在一個文件夾下
example.js
var test = require('.');
console.log(test.a);
package.js
{
"main":"./test1.js"
}
test1.js
module.exports = {
a:1
}
index.js
module.exports = {
a:3
}
我們可以看到,執行example腳本時輸出的是1,如果把main的項去掉或者把main對應的值改成不存在的文件,則會加載index.js,輸出3,如果不存在這個index.js則報錯