node暴露(exports)規則和加載(require)規則

node筆記

  • fs核心模塊中的readFile,readDir
  • http核心模塊createServer,listen,on
  • url核心模塊url.parse 從路徑中取出
  • 服務端重定向
//301是永久重定向 單向性
res.statusCode = 302 //臨時重定向
res.setHeader('Location',path) //設置重定向的路徑

5.暴露規則

  • 可以理解爲在每一個模塊中都有一個module對象
  • const module={ exports:{} }然後module中有一個exports對象 ,然後在末尾 return module.exports ,但是這個是在node底層的我們看不見
  • 在哪一個文件中require那個文件就會得到module.exports
  • 但是平常我們還能見到這種寫法exports.
  • 但是呢我們平常還可以用到這種寫法exports.a = 'hello nodejs'那這種情況這個exports是什麼?
  • 其實在這裏面還有一條語句const exports = module.exports同樣這也是底層實現的
  • 還有一種情況exports = 'hello nodejs'這個是不對的 因爲最後return的是module.exports並不是exports
module.exports = 'hello nodejs'
exports.foo = 'helle' //這樣的話會報錯因爲module.exports已經被改成了一個字符串,不是一個對象了。

6.require暴漏規則

  • 優先從緩存加載
  • 6.1.加載核心模塊 核心模塊其實也有對應的文件,由於node是開源的所以這個可以在github上查看源碼在lib目錄有這些文件 例如fs 、url、http等require('fs) ....
  • 6.2第三方模塊 也就是我們平常npm的那些包,這個寫法和核心模塊的類似沒有路徑require('jquery') ......
  • 這中加載規則是爲默認找node_modules這個目錄,然後再在這個目錄中找jquery這個目錄,在這個目錄下找到package.json中的main屬性,main屬性就記錄了jQuery的入口js模塊, 然後就會加載這個包,實際還是加載的文件。
  • 如果沒有package.json或則main中沒有路徑,index.js文件就是默認選擇的文件,但是如果這個文件也沒有運行時就會報錯。
  • !!! 重點 !!! 如果上面的一切都不成立,也就是說在此目錄中沒有找到node_modules,會默認在上一級目錄中有沒有這個node_modules,如此向上找知道查詢到磁盤根目錄,如果還沒有找到則會報錯 can‘t find module xxx
  • 6.3 自己寫的js文件加載require('./index.js')自己的js文件肯定是要把路徑寫上的,如果不寫路徑的話但是它也不是核心模塊,也不是第三方的包,肯定是會報錯的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章