1. 程式人生 > >Nodejs學習——模組系統和函式

Nodejs學習——模組系統和函式

 

建立模組

       例項

var say = require('./test2');
say.nodejs();

 

       執行結果:

 

  “./”表示當前的目錄,引入當前目錄的test2.js檔案

 

       test2.js檔案中的內容:

       exports.nodejs= function () {
      console.log('this is node.js');
};

       exports是模組公開的介面,require用於從外部獲取一個模組的介面,即獲取的模組的exports物件。

 

       把物件封裝到模組中:

       例項:

var say = require('./test2');
say = new say();
say.sayhello();

 

test2.js檔案

function say() {
    var word = 'hello world';
    this.sayhello = function () {
        console.log(word);
    }
}

module.exports = say;

 

用module.exports = say 替換了原來的 exports.name = function(){}

同時使用的方式也稍有不同,第一個直接可以引用模組中的方法,而第二種則需要通過new方法以後才能引用。

 

 

Require方法的查詢優先順序

1、檔案模組快取區

2、原生模組

3、檔案模組

 

在路徑 Y 下執行 require(X) 語句執行順序:(節選自菜鳥教程:https://www.runoob.com/nodejs/nodejs-module-system.html)

1. 如果

X 是內建模組

   a. 返回內建模組

   b. 停止執行

2. 如果 X '/' 開頭

   a. 設定 Y 為檔案根路徑

3. 如果 X './' '/' or '../' 開頭

   a. LOAD_AS_FILE(Y + X)

   b. LOAD_AS_DIRECTORY(Y + X)

4. LOAD_NODE_MODULES(X, dirname(Y))

5. 丟擲異常 "not found"

 

LOAD_AS_FILE(X)

1. 如果 X 是一個檔案, X 作為 JavaScript 文字載入並停止執行。

2. 如果 X.js 是一個檔案, X.js 作為 JavaScript 文字載入並停止執行。

3. 如果 X.json 是一個檔案, 解析 X.json JavaScript 物件並停止執行。

4. 如果 X.node 是一個檔案, X.node 作為二進位制外掛載入並停止執行。

 

LOAD_INDEX(X)

1. 如果 X/index.js 是一個檔案,  X/index.js 作為 JavaScript 文字載入並停止執行。

2. 如果 X/index.json 是一個檔案, 解析 X/index.json JavaScript 物件並停止執行。

3. 如果 X/index.node 是一個檔案,  X/index.node 作為二進位制外掛載入並停止執行。

 

LOAD_AS_DIRECTORY(X)

1. 如果 X/package.json 是一個檔案,

   a. 解析 X/package.json, 並查詢 "main" 欄位。

   b. let M = X + (json main 欄位)

   c. LOAD_AS_FILE(M)

   d. LOAD_INDEX(M)

2. LOAD_INDEX(X)

 

LOAD_NODE_MODULES(X, START)

1. let DIRS=NODE_MODULES_PATHS(START)

2. for each DIR in DIRS:

   a. LOAD_AS_FILE(DIR/X)

   b. LOAD_AS_DIRECTORY(DIR/X)

 

NODE_MODULES_PATHS(START)

1. let PARTS = path split(START)

2. let I = count of PARTS - 1

3. let DIRS = []

4. while I >= 0,

   a. if PARTS[I] = "node_modules" CONTINUE

   b. DIR = path join(PARTS[0 .. I] + "node_modules")

   c. DIRS = DIRS + DIR

   d. let I = I - 1

5. return DIRS

 

函式

Node.js函式的使用與javascript類似

函式可以作為引數使用

例項

 

function miss() {
    console.log("我慢慢地、慢慢地瞭解到,所謂父女母子一場,只不過意味著"+
        ",你和他的緣分就是今生今世不斷地在目送他的背影漸行漸遠。你站在小"+
        "路的這一端,看著他逐漸消失在小路轉彎的地方,而且,他用背影默默告"+
        "訴你:不必追。")
}

function say(funName){
    funName();
}

var say = say(miss);

 

執行結果:

 

 

匿名函式

 

例項

 

function say(funName){
    funName();
}

var say = say(function () {
    console.log("我慢慢地、慢慢地瞭解到,所謂父女母子一場,只不過意味著"+
        ",你和他的緣分就是今生今世不斷地在目送他的背影漸行漸遠。你站在小"+
        "路的這一端,看著他逐漸消失在小路轉彎的地方,而且,他用背影默默告"+
        "訴你:不必追。")
});

執行結果: