Node.js Module Path
一. Module Path
1. ./node_modules
2. ../node_modules
3. $HOME/.node_modules
4. $HOME/.node_libraries
5. $PREFIX/lib/node
所以當你發現找不到modules的時候,可以先看看這幾個路徑有沒有相對應的modules
二. 從node_modules資料夾讀取modules
如果你的module經過require()判斷不是native module的話,並且沒有開頭的部份帶有
'/' , '../' 或是 './' 接著node會從目前module所在的父目錄加上'/node_modules',並
且嘗試從這些位置來讀取module
如果他沒有在目前的目錄加上/node_modules找到module的話,node繼續往上一層繼續找
找到最前面的目錄(root of the tree)為止
我們從範例來看node.js讀取module的路徑的順序是怎樣的,假設我們的檔案在 '/home/user/project/foo.js'然後call require('bar.js'),他會依序以下的目錄來找尋bar.js
1. /home/user/project/node_modules/bar.js
2. /home/user/node_modules/bar.js
3. /home/node_modules/bar.js
4. /node_modules/bar.js
三. Folders as Modules
顧名思義就是將文件夾看成是一個module,例如: require('./cat');
使用這個方式的話node會找尋cat目錄底下兩個檔案來讀取
(如果沒有定義package.json的話):
(如果沒有定義package.json的話):
./cat/index.js
./cat/index.node
但如果你不想依照他這種名稱來呼叫的你自己的modules的話
可以使用package.json來重新定義檔案看起來會像是這樣:
{ "name" : "cat",
"main":"./lib/cat.js"}
name定義的就是你module的名稱,main的話就是你指定cat這個module的入口點檔案。
假如你的module目錄是在 ./cat 接著使用require('./cat')來讀取moduls,node會嘗試
從./cat/lib/這個目錄來讀取cat.js
從./cat/lib/這個目錄來讀取cat.js
4. Example
最後來個範例,檔案結構長成這樣:
.
├── app.js
└── node_modules
└── cat
├── lib
│ └── cat.js
└── package.json
先從node_modules來看
cat這個目錄包含了lib跟package.json,lib只有cat.js
package.json的內容:
{
"author": "Carter Tsai",
"name": "cat",
"description": "test",
"version": "0.0.1",
"main": "./lib/cat.js",
"dependencies": {},
"devDependencies": {},
"optionalDependencies": {},
"engines": {
"node": "*"
}
}
/lib/cat.js的內容
module.exports = function(){
console.log("Hello Cat");
}
最後是app.js的內容
var cat = require('cat');
cat();
用node.js去執行你的app.js吧
$> node app.js
Hello Cat
留言