轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。
原文參考:https://dzone.com/articles/node-dependency-management-part2
在上篇介紹Node.js依賴關係管理的文章中,我們介紹了關於Node.js模組的基礎知識,如何使用module.exports和require方法處理依賴項,以及資料夾依賴項(folder dependencies)的工作方式和工作原理。
今天我們將繼續從這一點出發,來了解如何使用這個系統模組將應用程式分解成多個模組,以及這樣做的優勢和Node.js的工作原理。
本文內容中提及到了上篇中一些經驗分享,在閱讀本文之前可以閱讀上篇詳細瞭解。
在我們繼正式開始瞭解學習如何使用多個模組設定應用程式之前,我們一起來了解Node.js模組一些其他方面的有趣內容。
Node Modules是單例模式嗎
在上一篇文章中,我們討論了Node.js一次只會載入一個模組。如果發出請求,Node.js會給出該模組的快取副本。因此看起來這些模組的行為就像獨生子女。這裡我們看一個例子,來說明這種情況。
首先,我們為應用程式建立了一個專案,初始化應用程式,並建立了一個檔案user.js,如下所示:
接著,在APP.JS中我們會使用使用者模組(user module),並按照如下方式使用:
可以看到我們建立兩了兩個使用者,只要對其中一個變數做出修改就會影響另一個變數的內容。我們必須意識到使用者模組會被快取,並在進行另一個請求的時間內被重用。
接下來我們把它改成一個建構函式,看看他如何進行工作
建構函式
我們在上篇內容中介紹了建構函式,實現了user.js的更改:
這一部分內容下面要繼續在app.js中使用:
我們可以看到兩個不同的例子,並且可以直觀感受到這之間的不同。不用太擔心不同的問題,後文中將會介紹其他例子和解決方案。
現在我們開始介紹關於我們本次的主題,關於如何使用模組管理應用程式。
應用程式構建
我們開始搭建一個簡單的應用程式基礎,接下來會在講解的過程中不斷對它進行細化。
我們已經建立了一些新的資料夾,現在程式中包含的結構如下:
首先我們給不同的模組建立了單獨的資料夾。現在已經有的圖書管理資料夾,另一個用於日誌記錄器資料夾,類似於使用者管理。這樣我們的每個模組都有重點,易於定位和管理。同時在每個資料夾內都有子資料夾。這裡我們需要注意資料夾級別的index.js檔案,它將作為模組的API。
然後在app.js中我們可以通過require引用模組,看到它按照預期工作的工程。注意我們如何通過require user.js來引用它。
現在我們來更新程式碼內容:
我們在圖書管理模組下建立了幾個專案,在這這模組中我們可以看到book.js遵循常見JavaScript建構函式模式(但與user.js中看到的建構函式示例略有不同)。
在相應的index.js檔案中有以下程式碼:
index.js作為模組的API,讓我們在app.js中使用它,如下所示:
將user.js改為與book.js相同的建構函式模式後我們的程式正按照預期工作。這裡提示一點,我們可以使用Node.js中其他語言的現有JavaScript內容進行編寫。根據自己的偏好進行選擇就可以。
下面是程式碼user.js重構之後的樣子:
總結
本文中介紹的應用程式內容都十分基礎,我們通過學習Node.js依賴性管理的一些基礎知識和一些建立專案結構的常用方法來進行了檔案模組管理。
我們還看到Node.js應用程式中使用JavaScript設計模式的相關知識,並且也通過一些簡單的例子進行說明。