Node.js Module Path

一.  Module Path


Node.js讀取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的話):

./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

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



張貼留言

這個網誌中的熱門文章

解釋scope.$apply用來做什麼? -- AngularJS

Unions 在C語言的簡單介紹

JavaScript的Timer用法