一、模塊路徑解析規則
1.1 內置模塊
內置模塊。使用
require("fs");
1.2 node_modules目錄
這個目錄是用來存放模塊的。例如某個模塊的絕對路徑是/home/user/hello.js,在該模塊中使用require(‘foo/bar’)方式加載模塊時,則NodeJS依次嘗試使用以下路徑。
/home/user/node_modules/foo/bar
/home/node_modules/foo/bar
/node_modules/foo/bar
NODE_PATH環境變量
用於指定NodeJs額外的模塊搜索路徑。linux下用:
分隔,windows下使用;
分隔。例如定義了以下NODE_PATH環境變量:
NODE_PATH=/home/user/lib:/home/lib
當使用require(‘foo/bar’)的方式加載模塊時,則NodeJS依次嘗試以下路徑。
/home/user/lib/foo/bar
/home/lib/foo/bar
二、包
2.1 index.js
我們可以把由多個子模塊組成的大模塊稱做包,並把所有子模塊放在同一個目錄裏。
- /home/user/lib/
- cat/
head.js
body.js
main.js
require(’/home/user/lib/cat/main’)
就能達到目的。如果把main.js
改爲index.js
可以像下面那樣寫。
// 感覺整個目錄被當做單個模塊使用
var cat = require('/home/user/lib/cat');
var cat = require('/home/user/lib/cat/index');
2.2 package.json
如果想自定義入口模塊的文件名和存放位置,就需要在包目錄下包含一個package.json文件,並在其中指定入口模塊的路徑。如路徑
- /home/user/lib/
- cat/
+ doc/
- lib/
head.js
body.js
main.js
+ tests/
package.json
它的package.json可以這麼寫。
{
"name": "cat",
"main": "./lib/main.js"
}
這樣,就可以通過下面語句獲取模塊了。
var cat = require('/home/user/lib/cat');
三、工程目錄
一個命令行程序爲例,一般我們會同時提供命令行模式和API模式兩種使用方式,並且我們會藉助三方包來編寫代碼。除了代碼外,一個完整的程序也應該有自己的文檔和測試用例。因此,一個標準的工程目錄都看起來像下邊這樣。
- /home/user/workspace/node-echo/ # 工程目錄
- bin/ # 存放命令行相關代碼
node-echo
+ doc/ # 存放文檔
- lib/ # 存放API相關代碼
echo.js
- node_modules/ # 存放三方包
+ argv/
+ tests/ # 存放測試用例
package.json # 元數據文件
README.md # 說明文件
記錄命令行程序
地址
四、NPM
npm的應用場景。
- 允許用戶從NPM服務器下載別人編寫的三方包到本地使用。
- 允許用戶從NPM服務器下載並安裝別人編寫的命令行程序到本地使用。
- 允許用戶將自己編寫的包或命令行程序上傳到NPM服務器供別人使用。