Node.js模組

weixin_34320159發表於2016-09-13

Node.js 模組和 Node.js 包介紹。

一、Node.js模組

每一個Node.js都是一個Node.js模組,包括JavaScript檔案(.js)、JSON文字檔案(.json)和二進位制模組檔案(.node)。

1. 模組的使用

編寫一個模組:在虛擬機器桌面新建一個檔案mymodule.js,輸入如下程式碼並儲存:

<pre>
function hello() {
console.log('Hello');
}
function world() {
console.log('World');
}
</pre>
這就是一個Node.js模組,但是怎麼在其他模組中引入並使用這個模組呢?我們需要為模組提供對外的介面,這就要用到module.exports和exports

*我們可以這樣寫mymodul.js:
<pre>
function hello() {
console.log('Hello');
}
function world() {
console.log('World');
}
exports.hello = hello;
exports.world = world;
</pre>
*在其他模組中,可以使用require(module_name);載入需要的模組,如,在虛擬機器桌面新建index.js
,輸入如下程式碼並儲存:
<pre>
var hello = require('./mymodule'); // 也可以寫作
var hello = require('./mymodule.js');// 現在就可以使用mymodule.js中的函式了
hello.hello(); // >> Hello
hello.world(); // >> World
</pre>

也可以這樣寫mymodule.js
<pre>
function Hello() {
this.hello = function() {
console.log('Hello');
};
this.world = function() {
console.log('World');
};
}
module.exports = Hello;
</pre>

此時,index.js
就要改成這樣:
<pre>
var Hello = require('./mymodule');
var hello = new Hello();
hello.hello(); // >> Hello
hello.world(); // >> World
</pre>

2. module.exports和exports

module是一個物件,每個模組中都有一個module物件,module是當前模組的一個引用。
module.exports物件是Module系統建立的,而exports可以看作是對module.exports物件的一個引用。
在模組中require另一個模組時,以module.exports的值為準,
因為有的情況下,module.exports和exports它們的值是不同的。
module.exports和exports的關係可以表示成這樣:

<pre>
// module.exports和exports相同的情況
var m = {}; // 表示 module
var e = m.e = {}; // e 表示 exports, m.e 表示 module.exports
m.e.a = 5;
e.b = 6;
console.log(m.e); // Object { a: 5, b: 6 }
console.log(e); // Object { a: 5, b: 6 }
</pre>

二、Node.js包

1. 包

包用於管理多個模組及其依賴關係,可以對多個模組進行封裝,
包的根目錄必須包含package.json檔案,
package.json檔案是CommonJS規範用於描述包的檔案,
符合CommonJS規範的package.json檔案應該包含以下欄位:

  • name:包名。包名是唯一的,只能包含小寫字母、數字和下劃線。
  • version:包版本號。
  • description:包說明。
  • keywords:關鍵字陣列。用於搜尋。
  • homepage:專案主頁。
  • bugs:提交bug的地址。
  • license:許可證。
  • maintainers:維護者陣列。
  • contributors:貢獻者陣列。
  • repositories:專案倉庫託管地址陣列。
  • dependencies:包依賴。
    下面是一個package.json示例:
    <pre>
    {
    "name": "shiyanlou",
    "description": "Shiyanlou test package.",
    "version": "0.1.0",
    "keywords": [
    "shiyanlou",
    "nodejs"
    ],
    "maintainers": [{
    "name": "test",
    "email": "test@shiyanlou.com"
    }],
    "contributors": [{
    "name": "test",
    "web": "http://www.shiyanlou.com/"
    }],
    "bugs": {
    "mail": "test@shiyanlou.com",
    "web": "http://www.shiyanlou.com/"
    },
    "licenses": [{
    "type": "Apache License v2",
    "url": "http://www.apache.org/licenses/apache2.html"
    }],
    "repositories": [{
    "type": "git",
    "url": "http://github.com/test/test.git"
    }],
    "dependencies": {
    "webkit": "1.2",
    "ssl": {
    "gnutls": ["1.0", "2.0"],
    "openssl": "0.9.8"
    }
    }
    }
    </pre>
2. npm包管理工具

由於實驗樓環境網路限制,所以npm命令會連線taobao的源,而不會直接連線官方源。
npm 也可以從第三方網站(http://www.npmjs.org/)上下載第三方Node.js包。

在實驗樓的環境中搜尋包(預設會連線到taobao的Node.js源):

  • shiyanlou@cqqg0heZ:~$ sudo npm search express

  • 安裝包:
    shiyanlou@cqqg0heZ:~$ sudo npm install -g express

  • 更新包:
    shiyanlou@cqqg0heZ:~$ sudo npm update express

  • 解除安裝包:
    shiyanlou@cqqg0heZ:~$ sudo npm uninstall express

相關文章