天天看點

node.js學習——Node子產品系統,充分認識子產品,子產品的導入、導出。1. Node中的子產品類别2. CommonJS子產品規範3. 基本使用方法4. 導出的原了解析總結

node.js學習——Node子產品系統,充分認識子產品,子產品的導入、導出。

  • 1. Node中的子產品類别
    • 1. 核心子產品
    • 2. 第三方子產品
    • 3. 自定義子產品
  • 2. CommonJS子產品規範
  • 3. 基本使用方法
    • 1. 加載子產品
    • 2. 子產品的導出
  • 4. 導出的原了解析
  • 總結

前言: Node.js是成為一名優秀的前端開發工程師的必修課。Node.js中的子產品是其應用程式的基本組成部分, 是以我們需要對Node中的子產品系統有着清晰的認知與使用。

1. Node中的子產品類别

1. 核心子產品

Node為JS提供了很多的伺服器級别的API,這些API被封裝到了一個個具名的核心子產品中去了。我們可以很友善的使用這些子產品,來完成我們想要完成的需求以及功能。

2. 第三方子產品

我們在使用node進行開發時,經常會引用第三方的子產品,常見的第三方子產品有:

  • 時間格式化子產品dateformat
  • 路由子產品 router
  • 模闆插件子產品art-template
  • 等等等。。。

3. 自定義子產品

同樣,我們可以在開發時,為特定的功能定制化開發具有特定功能的子產品。

2. CommonJS子產品規範

特點:

  1. 所有的代碼都運作在子產品作用域中,不會對全局作用域造成污染。
  2. 子產品不限制加載的次數,可以多次加載。
  3. 子產品加載的順序,就是按照其在代碼中出現的次序。

3. 基本使用方法

1. 加載子產品

文法:

var 自定義導入子產品變量名稱 = require('子產品')

var fs = require('fs')  //導入核心子產品中的檔案子產品
var http = require('http') //導入核心子產品中的http子產品
           

執行:

1. 執行被加載子產品中的代碼

2. 得到被加載子產品中的 exports 導出對象,

3. 隻有加載了子產品,才能使用到處對象中的方法。

2. 子產品的導出

了解:

  • Node是子產品作用域,所有檔案中的成員都隻在它所處的子產品中有效。
  • 如果想成員被其他子產品使用,就必須把這些成員挂載到exports 接口對象中,進行導出操作。
  • 子產品的導出實際上是把想與其它子產品共享的成員變量進行導出操作。

文法:

導出多個成員

exports.a = 123;
exports.b = 'hello';
exports.c = function () {
    console.log('ccc')
}
exports.d = {
    foo : 'bar'
}
           

此時,導出了一個對象。對象中有4個成員變量,分别是a、b、c、d。我們可以把數字、字元串、數組、函數、對象等導出。

導出單個成員:

此時我們導出的隻是一個字元串“你好”,而不是導出一個對象。

以下情況會出現導出的覆寫操作:

module.exports = 'hello'

// 後者覆寫前者
module.exports = function (x, y) {
    return x + y;
}
           

此時導出的隻是一個function

node.js學習——Node子產品系統,充分認識子產品,子產品的導入、導出。1. Node中的子產品類别2. CommonJS子產品規範3. 基本使用方法4. 導出的原了解析總結

也可以通過module.exports設定為一個對象,然後把要導出的全放入這個對象中,達到導出多個變量的操作。

module.exports = {
   add: function (x, y) {
       return x + y;
   },
   str: 'hello'
}
           

4. 導出的原了解析

提問1:為什麼有時候使用 exports 進行導出操作,而有些時候使用 module.exports 來進行導出操作呢?

事實上:Node.js中,每個子產品内部都有一個module對象,而module對象中有一個成員叫做exports。是以,你會使用module.exports來進行導出操作。而Node.js為了簡化操作,不用每次導出時都加一個module,是以專門提供了一個變量exports,而exports指向的就是module.exports指向的對象。是以我們會有這兩種方法來進行操作導出。

**提問2:**什麼時候使用exports,什麼時候使用module.exports呢?

當我們要導出子產品中的多個成員時,建議使用exports。

當我們要導出子產品中的一個成員時,建議使用module.exports。

當一個子產品需要導出單個成員的時候,直接給exports 指派是不管用的

因為exports隻是指向module.exports,而子產品最後真正導出的實際上是module.exports。是以直接給exports指派,導出後在另一個子產品中是看不到’hello’的。

下面看一個示例:

//此時exports和module.exports 還是指向同一個引用,是以會把a加入到moule.exports中
exports.a = 123

//把exports重新指派給一個新對象,此時不指向module.exports
exports = {}

//由于上一步的操作,此時指派已經不能放入到module.exports中了。
exports.foo = 'bar'

//在module.exports中加入b
module.exports.b = 456
           

此時子產品導出的内容應該是:

解釋看上面的代碼注釋。主要了解了對象是一個引用這個概念就可以了解上面的原因了。

總結

導出操作:真正去使用的時候:
	導出多個成員:exports.xxx = xxx	
	導出單個成員: module.exports = xxx
這樣就不會犯錯了!
           

Node.js具有強大的功能,如果你覺得此篇文章對你有幫助,記得一鍵三連哦!

學無止境!沖!

繼續閱讀