Node.js的模組系統

來源:互聯網
上載者:User

標籤:傳遞   相對路徑   名稱   參考關聯性   模組   win   檔案   函數對象   nbsp   

  編寫稍大一點的程式時一般都會將代碼模組化。Node.js提供了一個簡單的模組系統。模組既可能是一個檔案,也可能是包含一個或多個檔案的目錄。

      模組的建立 

  •   如果模組是個檔案,一般將代碼合理拆分到不同的JS檔案中,每一個檔案就是一個模組,而檔案路徑就是模組名。
  •   如果模組是個目錄, Node通常會在這個目錄下找一個叫index.js的檔案作為模組的入口(這個預設設定可以重寫)。

 

       模組的匯出 

  Node模組允許你從被引入檔案中選擇要暴露給程式的函數和變數。如果模組返回的函數或變數不止一個,那它可以通過設定exports對象的屬性來指明它們。但如果模組只返回一個函數或變數,則可以設定module.exports屬性。

      引用的函數或變數為多個的情況:

      

      引用一個函數對象的情況,但下面是個錯誤的例子:

  

        exports = Currency 應改為 module.exports = Currency ;

        這是因為最終在程式裡匯出的是module.exports。 exports只是對module.exports的一個全域 引 用 , 最 初 被 定 義 為 一 個 可 以 添 加 屬 性 的 空 對 象 。 所 以 exports.myFunc 只 是module.exports.myFunc的簡寫。所以,如果把exports設定為別的,就打破了module.exports和exports之間的參考關聯性。

 

 

       

       模組路徑解析規則

  require函數支援斜杠(/)或盤符(C:)開頭的絕對路徑,也支援./開頭的相對路徑。但這兩種路徑在模組之間建立了強耦合關係,一旦某個模組檔案的存放位置需要變更,使用該模組的其它模組的代碼也需要跟著調整,變得牽一髮動全身。因此,require函數支援第三種形式的路徑,寫法類似於foo/bar,並依次按照以下規則解析路徑,直到找到模組位置。

  1.內建模組

如果傳遞給require函數的是NodeJS內建模組名稱,不做路徑解析,直接返回內部模組的匯出對象,例如require(‘fs‘)。

  

  2. node_modules目錄

NodeJS定義了一個特殊的node_modules目錄用於存放模組。例如某個模組的絕對路徑是/home/user/hello.js,在該模組中使用require(‘foo/bar‘)方式載入模組時,則NodeJS依次嘗試使用以下路徑。

/home/user/node_modules/foo/bar
/home/node_modules/foo/bar
/node_modules/foo/bar

     

  3.NODE_PATH環境變數

與PATH環境變數類似,NodeJS允許通過NODE_PATH環境變數來指定額外的模組搜尋路徑。NODE_PATH環境變數中包含一到多個目錄路徑,路徑之間在Linux下使用:分隔,在Windows下使用;分隔。例如定義了以下NODE_PATH環境變數:

NODE_PATH=/home/user/lib:/home/lib
當使用require(‘foo/bar‘)的方式載入模組時,則NodeJS依次嘗試以下路徑。

/home/user/lib/foo/bar
/home/lib/foo/bar

 

  模組初始化
一個模組中的JS代碼僅在模組第一次被使用時執行一次,並在執行過程中初始化模組的匯出對象。之後,緩衝起來的匯出對象被重複利用。

  主模組
通過命令列參數傳遞給NodeJS以啟動程式的模組被稱為主模組。主模組負責調度組成整個程式的其它模組完成工作。例如通過以下命令啟動程式時,main.js就是主模組。

$ node main.js

Node.js的模組系統

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.