node 中的模塊使用

Node 中的模塊的分類

node由三部分組成:ECMAScript + 核心模塊 + 第三方模塊node

核心模塊

  • 官方發現一些功能模塊使用很是頻繁,因此官方把這些模塊,編譯成了二進制可執行文件,打包到了Node的安裝包中;這些核心模塊就已經隨着安裝Node時候,被安裝到了本地;程序員

  • 如何使用核心模塊 使用require(‘核心模塊的名稱’);npm

第三方模塊

  • 第三方模塊:除了官方提供的好用的核心模塊以外,咱們程序員發現,還有一些使用也很頻繁的代碼和方法,一些牛逼的團體、我的、公司,開發出了好用的模塊,經過NPM官網,託管出去,供其餘人下載使用的這些模塊;
    統稱爲第三方模塊;
    json

  • 咱們在開發的過程當中,常常須要使用到各類各樣的第三方模塊緩存

  • 使用方式:下載安裝 >> 引入 >> 使用ui

  • 用戶模塊

    • 因爲業務的須要,程序員本身定義的完成某些特定功能的JS文件,通通稱爲用戶模塊!this

    • 它的引入也是使用require()spa

    • 使用方式:建立 >> 引入 >> 使用 code

 

第三方模塊的使用

  1. 先使用npm下載這個模塊!【注意:在安裝第三方模塊的時候,安裝的名字,就是你在require時候導入的名字】orm

  2. 使用require導入這個第三方模塊!

  3. 經過官方文檔,試着去使用這個第三方模塊!

  4. 注意:不管是核心模塊、仍是第三方模塊,都是經過 require來引用這個模塊的!

  5. 一個簡單的第三方模塊使用的案例

1 // 這個文件演示一下若是使用第三方模塊moment實現日期數據的格式化處理
2 // 1. 引入moment(引入以前確保這個模塊已經正確的下載哦)
3 const moment = require('moment')
4 
5 // 2.定義一個日期,如今日期值是未格式化的日期數據
6 let timeNow = new Date()
7 
8 // 3.調用moment實現對日期數據的格式化處理
9 console.log(moment(timeNow).format('YYYY-MM-DD HH:mm:ss'))

 

 

導出用戶模塊中的成員

exports

- 它是一個對象,咱們能夠在這個對象上掛載你想暴露的成員

- 使用.語法在exports上掛載成員

- 使用自定義模塊舉例:

// 咱們所建立的js文件就能夠認爲是一個自定義模塊
var obj = {
    name:'jack',
    age:20
}

function sayHi(){
    console.log('個人名字叫:'+obj.name+",個人年齡是:"+obj.age)
}

// 在模塊中有一個默認的對象exports,這個對象在在這個模塊被引入的時候會自動的返回
// 咱們導出成員的方式就是在這個對象上掛載你想暴露的成員
exports.sayHi = sayHi
exports.aa = obj

 

使用自定義模塊:

// 如何使用用戶自定義模塊:
// 全部模塊想使用都要先引入
// 若是引入一個模塊,那麼這個模塊默認會返回一個對象
var umodule = require('模塊文件的路徑')
umodule.sayHi()

 

 

module.exports

- 它是一個對象,咱們能夠在這個對象上掛載你想暴露的成員

- 使用.語法在module.exports上掛載成員

- 也能夠將module.exports重置爲一個新的對象,對象中就包含你想暴露的成員 ,只要引入這個模塊成員就會自動暴露

// 引入一個模塊,還會自動的暴露這個模塊的module.exports對象

module.exports = {
  name: 'rose',
  say: function () {
    console.log(this.name)
  }
}

 

1.定義用戶模塊

// 咱們所建立的js文件就能夠認爲是一個自定義模塊
var obj = {
    name:'jack',
    age:20
}
function sayHi(){
    console.log('個人名字叫:'+obj.name+",個人年齡是:"+obj.age)
}

// 在模塊中有一個默認的對象module.exports,這個對象在這個模塊被引入的時候會自動的返回
// 咱們暴露成員的方式就是在這個對象上掛載你想暴露的成員

// module.exports.sayHi = sayHi
// module.exports.aa = obj
// 也能夠直接使用你想暴露的成員覆蓋module.exports
module.exports = sayHi

 

 

exports 和 module.exports 的區別

  1. 經過 module.exports 可使用 . 語法的形式追加屬性,也可使用 = 直接賦值的形式導出成員;

  2. exports 只能經過 . 的形式追加屬性;不能使用 = 直接賦值的形式!

  3. 注意: 在一個 module 中,最終向外暴露的成員,以 module.exports 指向的對象爲準!

  4. 在一個模塊中,不要混合使用 module.exportsexports

  5. 若是使用點語法,沒有區別
  6. 若是使用重置對象,只能使用module.exprts

使用原則

  • 能使用module.exports就不要使用exports

  • 若是模塊中只有一個成員須要暴露,就直接賦值給你想暴露的成員

  • 若是有多成員須要暴露,就寫在module.exports的對象中

 

模塊查找(加載)規則

  1. 優先從緩存中加載:若是緩存中有這個模塊就直接從緩存中加載(不會再去編譯指定的模塊),若是緩存中沒有,就加載模塊,同時存儲到緩存

  2. 加載核心模塊:優先從緩存中加載;若是緩存中沒有的話,再去執行加載核心模塊!

  3. 用戶自定義模塊:優先從緩存中加載;若是緩存中沒有的話,再去執行加載用戶模塊!

用戶模塊的查找規則:
若是不寫後綴名,則先嚴格按照給定的文件名去查找模塊並加載執行;按順序查找文件,找到則再也不繼續查找
index   ->  index.js  ->   index.json    ->  index.node

    4.  第三方模塊查找規則:

    1. 首先,查看項目根目錄中有沒有 node_modules 文件夾  

    2. 查找 node_modules 文件夾中,有沒有和第三方模塊名稱一致的文件夾  

    3. 在模塊對應的文件夾中,查找有沒有 package.json 這個文件  

    4. package.json 文件中,查找有沒有 main 屬性  

    5. 若是有 main 屬性,而且 main 屬性指向的路徑存在,那麼就嘗試加載這個路徑指定的文件!  

    6. 若是 package.json 文件中,沒有 main 屬性,或者 main 屬性指向的路徑不存在,或者沒有package.json 文件, 那麼,Node嘗試加載 模塊根目錄中 index 相關文件:index.js -> index.json -> index.node  

    7. 若是在node_modules文件夾中,找不到對應的模塊文件夾,或者在項目根目錄中根本沒有node_modules文件夾,則向上一層文件夾中去查找,查找規則同上!  

    8. 若是上一層目錄中也沒有查找到,則再向上翻一層去查找,直到找到當前項目所在的盤符根目錄爲止!  

    9. 若是找到當前盤符根目錄還找不到,則報錯:cannot find module    

相關文章
相關標籤/搜索