使用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.json
中main
指定的文件。如果加載失敗,則繼續查找目錄下的index
,即index.js
, index.json
, index.node
被加載后的文件會被緩存,再次加載時文件不會再次執行,而是從緩存中讀取。已經緩存的文件可以通過require.cache
查看。也可以在此處刪除緩存。
在加載模塊時,node會向模塊提供幾個變量,exports
, module
, require
, __dirname
, __filename
。其中exports
, module
, require
為模塊提供加載模塊,導出內容的功能,__dirname
為當前文件所在目錄的絕對路徑,__filename
為當前文件的絕對路徑