Node--1.模塊化

通過B站,老陳打碼2020最新最全Node實戰課程(含爬蟲和web服務器開發)
進行學習

一、模塊的導出和導入

1. require

  • 用於: 用來在一個模塊中引入另外一個模塊。

  • 用法: 模塊名可以用絕對路徑也可以用相對路徑,模塊的後綴名.js可以省略。

let a = require('./index1');
let b = require('nodeStudy/src/index1');
let c = require('./index1.js');
  • 作用:
  1. 執行導入的模塊中的代碼 (只會執行一次:多次導入,一次執行)
  2. 返回導入模塊的 接口對象
  • 注意:

在沒有任何內容導出去的情況下,獲取某個文件的內容,會得到一個空對象{}

2. exports

  • 用於: 導出當前模塊的公共方法或屬性

  • 用法: exports.name, (name爲導出的對象名)

var a = 1;

// exports就是默認導出的對象
exports.a = a;

exports.add = function () {
  let i = 0
  console.log(++i)
}

3. module.exports

  • 用於: 導出一個默認對象,沒有指定對象名,常見於修改模塊的原始導出對象
  • 用法:
module.exports = function () {
  console.log('hello world!')
}

4. exportsmodule.exports的不同

  1. 系統默認設置了:exports = module.exports,即exports指向module.exports
  2. 系統只會讀取modeul.exports的內容,一切以module.exports爲準
  3. 使用exports時,只能單個設置屬性 exports.a = a
  4. 使用module.exports可以單個設置屬性,也可以整個賦值

二、模塊的初始化

一個模塊中的JS代碼僅在模塊第一次被使用時執行一次,並且在使用的過程中進行初始化,之後緩存起來便於後續繼續使用。

比如:

導入模塊有一個 console.log()

在導入模塊有兩個 require,那麼只會console.log()一次

三、主模塊

  • 含義: 通過命令行參數傳遞給NodeJS以啓動程序的模塊被稱爲主模塊
  • 作用: 主模塊負責調度組成整個程序的其它模塊完成工作
  • 實例:

當我們在使用vue、axios時,通常都會有一個啓動的主文件,例如vue的main.js,axios的request.js,通常這類文件,就是主入口,也是主模塊

四、require加載第三方包的步驟

通過npm下載的第三方包,都是通過let xx = require('第三方包'),接下來是原理步驟

  1. require('第三方包名')優先在加載該包的模塊的同級目錄node_modules中查找第三方包。

在這裏插入圖片描述

  1. 找到該第三方包中的package.json文件,並且找到裏面的main屬性對應的入口模塊,該入口模塊即爲加載的第三方模塊

在這裏插入圖片描述

  1. 如果在要加載的第三方包中沒有找到package.json文件或者是package.json文件中沒有main屬性,則默認加載第三方包中的index.js文件。

  2. 如果在加載第三方模塊的文件的同級目錄沒有找到node_modules文件夾,或者以上所有情況都沒有找到,則會向上一級父級目錄下查找node_modules文件夾,查找規則如上一致。

  3. 如果一直找到該模塊的磁盤根路徑都沒有找到,則會報錯:can not find module xxx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章