問題描述

在node上運行程式時,當module一多常常會發生module無法require問題,或者呼叫module內的function時系統會出現

TypeError: Lib.xxxxx is not a function

require的module會呈現空object的現象,以下我們來探討發生該情況是什麼原因 ?

 

1. Require路徑錯誤

很有可能在檔案一開始的路徑就是錯的,當專案非常龐大時,資料夾的階層也可能錯綜複雜,導致require階層錯誤的情形

 const Module1 = require('../../../Module1')

我們可以使用IDE或Module路徑定義來解決問題

未命名.png

const path = {
    module1 : '/path/to/module1',
    module2 : '/path/to/module2',
    ...
}
 
const Module1 = require(path.module1)

 

2. Function Name錯誤

第二種情況就是單純自己打錯function name而已,解法也是多利用IDE的功能

個人很推薦微軟的vscode,功能真的很強大 !

 

3. Require module 形成loop

意思是你有A, B兩個module時,A module引用 B module 且同時 B module也引用 A module,就會發生呼叫module內function失敗的情況

此時我們可以使用npm的套件madge來檢查專案是否有circular dependencies的現象

 

1. 首先先將madge安裝至global環境中

npm install madge -g

2. 使用指令檢查專案是否有circular require的狀況

madge path/src/app.js --circular

3. 檢查結果,madge會顯示發生問題的檔案以及require的順序

 

在邏輯設計上就要避免這種loop引用module的事情發生,切記切記 !

 

努力工作的同時不要忘記美食能帶給你滿滿的能量 !  

Instagram : https://www.instagram.com/orangetalksome/

Facebook : https://www.facebook.com/orangetalksome/

arrow
arrow
    創作者介紹

    橘子亂說話 發表在 痞客邦 留言(0) 人氣()