天天看點

node.js學習13--自定義子產品自定義子產品

自定義子產品

開發者自己寫的子產品就是自定義子產品。在node.js中 ,對代碼的封裝是以子產品(一個一個的檔案)為機關進行的。一般的做法是實作好某一個功能之後,封裝成一個子產品,然後在其它檔案中使用這個子產品。

使用一個子產品,就是在一個js檔案中去使用另一個js檔案中定義的變量,常量,函數…

基本步驟

  1. 定義子產品

    建立一個js檔案,用子產品名給它命名。例如,子產品叫myModule,則這個js檔案最好叫myModule.js

  2. 導出子產品

    在myModule.js内部,定義一些函數,變量,當然,它們會根據業務要求做一些不同的工作。最後根據情況導出這些函數,變量。

//myModule.js
const myPI = 3;
function add(a, b) {
    return a + b;
}

// 通過module.exports來導出
module.exports = {
    myPI,
    add
};
           

注意:

  • module.exports 是固定寫法,一般放在檔案的最末尾,也隻用一次。
  • module.exports表示目前子產品要暴露給其它子產品的功能。當然不需要把所有在子產品中定義的函數都暴露出來。
  1. 引入子產品

    在需要使用子產品的檔案中,使用require語句引入定義好的子產品,注意使用相對路徑。假設目前的檔案是index.js,而希望在index.js檔案中使用myModule.js中的add方法。

做法是:

// index.js
const myMath = require('./myMath');

// require()就是用來引入子產品的
           

注意:使用自定義子產品時,使用相對路徑,而使用核心子產品時,不需要寫路徑。

  1. 使用子產品

    當一個子產品被成功引入之後,就可以按使用核心子產品的過程一樣去使用它們了。

// index.js
const myMath = require('./myMath');

// 在使用之前請先列印出來看看。
console.log(myMath);

let rs = myMath.add(23,45);
console.log(rs)   // 68
           

導出子產品的兩種方式

在自定義子產品過程中,有兩種導出子產品内容的方式:

  • exports
  • module.exports

參考

它們的關系是: exports是module.exports的别名,即:

exports === module.exports
           

是以下面兩種寫法的效果是一樣的:

// 1 mymodule.js
exports.f = function(){ }
exports.pi = 3.1415926
           
// 2 mymodule.js
module.exports.f = function(){ }
module.exports.pi = 3.1415926
           

差別在于:

  • 在引入某子產品時,以該子產品中module.exports指向的内容為準。
  • 在定義子產品時:
    • 在初始時,exports和module.exports是指向同一塊記憶體區域,其内容都是一個空對象。
    • 如果直接給exports對象指派(例如:exports={a:1,b:2}),此時,exports就不會再指向module.exports,而轉而指向這個新對象,此時,exports與module.exports不是同一個對象。而在引入子產品時,是以子產品的中的module.exports為準,是以,此時寫在exports上的對象是無法導出的。
  • 在導出子產品過程中,建議隻用一種方式(建議直接使用module.exports)。

繼續閱讀