轉載請註明出處:葡萄城官網,葡萄城爲開發者提供專業的開發工具、解決方案和服務,賦能開發者。
Node.js中的一個重要概念是依賴關係管理。本文就將帶你們瞭解依賴管理的各類模式以及Node.js如何加載依賴。
Node.js編寫模塊化代碼很是簡單,咱們可使用單個js文件非模塊化的編寫全部應用程序的內容。
在這裏你可能會問,模塊(module)是什麼,它又有什麼做用。
大型項目的實施之中,會有不少分工協做,爲了可讓分工更加方便和順利,咱們能夠將編寫好的代碼封裝起來,重複使用或者提供給第三方使用。在項目封裝階段將全部模塊組織編譯成一個完整程序。
總而言之,模塊是代碼爲了便於在開發中共享和重用,而進行的分組。這些模塊使咱們能夠將複雜的應用程序分解。以便讓咱們更好地理解代碼,發現並修復Bug。基於CommonJS,Node.js中使用require這個關鍵字來獲取一個JavaScript文件。前端
咱們給項目建立一個目錄,用npm init 進行初始化,建立了app.js和appMsg.js兩個JavaScript文件。node
此時兩個.js文件都是空的,咱們來繼續更新appMsgs.js文件web
此處能夠看到module.exports的用法,該方法公開給定文件(appMsgs.js)中的屬性或對象,這些屬性或對象能夠在另外一個文件中使用。本例中該文件是app.js
在這個系統中每一個文件均可以訪問module.exports,因此appMsgs.js文件中的一些項就被公開了,下面是具體使用這些內容的展現:npm
使用require關鍵字引用文件,使用的時候它將返回一個表示模塊化代碼段的對象。咱們將其分配給變量appMsgs variable,而後在console.log語句中使用屬性。獲得如下輸出:緩存
執行JavaScript,構造一個返回對象。這個對象能夠是一個類構造函數,也能夠是一個包含許多元素或一些簡單屬性的對象。
所以,經過管理require和module.exports,咱們能夠建立這些模塊化應用程序。
所需的功能加載代碼並只加載一次。若是其餘人經過require請求這個對象,只會獲得這個對象的緩存版本。app
接下來看看其餘方法模塊化
對代碼進行修改,再也不公開一個對象,而是導出整個函數。每次函數調用都會執行此代碼
下面是它如何在app.js文件中使用函數
不須要調用屬性,只須要像執行函數同樣。與函數執行不一樣的是每次執行這個代碼,函數中的代碼都會被從新執行
下面是運行結果工具
以上是module.exports的兩種模式及其差別,另外一個常見模式中咱們須要知道如何使用它做爲構造函數性能
下面是更新後的app.js文件
本質上來講這樣與在JavaScript中建立僞類並容許建立僞類的實例時是同樣的,下面是更改以後的輸出
如下是該模式的另外一個例子
咱們建立一個名爲userRepo.js的新文件
下面是app.js和此更改的執行結果
單個文件使用require很常見,但別忘了另外一種模式:文件夾的之間的依賴關係
在正式介紹文件夾相關性以前,咱們先來了解Nodejs如何查找依賴項,不要忽略前面例子中的這一內容:
var appMsgs = require("./appMsgs")
Node.js會查找appMsgs.js文件,也會將appMsgs做爲目錄查找,不管它首先找到哪一個都會進行記錄。
接着咱們建立一個名爲logger的文件夾,在該文件夾中建立一個index.js文件
app.js文件,它用require調用這個模塊
在這個例子中值得注意的是:
var logger = require("./logger/index.js")
該內容徹底正確,但若是改爲一下內容:
var logger = require("./logger")
由於項目中沒有logger.js,因此在有一個logger目錄時,默認狀況下會加載index.js做爲logger的起點。這就是咱們命名index.js的緣由,這段代碼的結果:
看到這裏,你可能會疑惑爲何還要費心去完成建立文件夾和inex.js的額外步驟呢?
緣由是,咱們可能正在組合一個複雜的依賴項,這個依賴項可能還有其餘依賴項。而記錄器的調用者不須要知道還有不少其餘依賴項存在。
這是一種封裝形式,當咱們構建更復雜的內容時,咱們能夠用多個文件構建它們,而在用戶端使用單個文件。文件夾是一種管理這些依賴關係的好方法。
再次要介紹的另外一個內容是NPM,你必定了解它的功能,帶來了不少便利。使用的方法也很簡單。
咱們可使用npm安裝依賴項
npm install underscore;
而後能夠在app.js中簡單地require
咱們能夠看到標紅位置如何使用下劃線包提供的功能。除此以外,當咱們須要使用這個模塊時,並不指定文件路徑,只須要使用它的名稱,Node.js將從應用程序中的node\u modules文件夾加載這個模塊
下面是它的輸出
本文介紹了Nodejs如何管理它的依賴關係,而且在咱們的應用程序中看到了一些可使用的模式。但願能夠對各位的開發學習帶來幫助。
歡迎下載試用純前端表格控件 SpreadJS,實現對web系統中表格功能模塊的性能進行優化。