nodejs模塊加載

使用nodejs也有很長一段的時間了,但卻感覺自己并沒有太多的積累。有時候會問自己,“你學了這么久了,比起初學者你強在哪呢?”
或許只是幾個常用的API調用的更熟練一些吧。學習的路上還是要腳踏實地,穩步前進。

nodejs中,加載一個模塊通過require()方法,例如require('fs')。這個方法接受模塊的標識符,可以加載的模塊分為3種:

  • node提供的核心模塊。
  • 路徑形式的文件模塊
  • 自定義模塊

核心模塊在node源代碼的編譯過程中已經編譯為二進制代碼,加載速度最快。加載文件模塊時,標識符是一個可以省略文件后綴名的文件路徑。node根據標識符中的路徑查找文件,如果文件后綴名省略,node會依次嘗試.js, .json, .node,每一種后綴名都對應一種不同的加載方式。通過require.extensions可以看到已有的文件加載方式,也可以自定義指定格式的加載方式。比如下面的代碼定義了.txt文件的加載方式。

require.extensions['.txt'] = function (module, filename) {
  var fs = require('fs')
  var res = fs.readFileSync(filename)
  module.exports = res.toString()
}

加載自定義模塊的標識符與核心模塊的類似,不過核心模塊具有更高的優先級。所以自定義模塊不能與核心模塊重名。在加載自定義模塊時,會依次查找當前目錄下的node_modules,父目錄下的node_modules,……,根目錄下的node_modules。通過module.paths查看所有需要查找的路徑。

require()不僅可以加載文件,還可以加載一個包,即通過標識符查找到的是一個目錄。它會加載該目錄下package.jsonmain指定的文件。如果加載失敗,則繼續查找目錄下的index,即index.js, index.json, index.node

被加載后的文件會被緩存,再次加載時文件不會再次執行,而是從緩存中讀取。已經緩存的文件可以通過require.cache查看。也可以在此處刪除緩存。

在加載模塊時,node會向模塊提供幾個變量,exports, module, require, __dirname, __filename。其中exports, module, require為模塊提供加載模塊,導出內容的功能,__dirname為當前文件所在目錄的絕對路徑,__filename為當前文件的絕對路徑

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • nodejs通過require加載模塊,require里面分為相對路徑和非相對路徑,不同的表示方法,node的尋找...
    前端大魔王閱讀 897評論 1 2
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,914評論 18 139
  • 今天的文章來自上午辦公室的閑聊,源于一位特別有思想的同事! 要我說啊!人生如戲,不是演戲的戲,是游戲的戲!他一邊站...
    D071_武漢_夏至幸閱讀 197評論 0 1
  • 這個盛夏,說是重回母校,卻也不是真正回到母校。關于我大學的回憶,基本都是停留在西環南路89號,而不是現在的濱海大...
    奈媞閱讀 301評論 1 1
  • 大米被稱為“五谷之首”,是我們日常生活中不可或缺的主食。它不僅能為我們的身體提供充足的碳水化合物,還富含蛋白質、脂...
    豆媽可愛多閱讀 6,493評論 6 13