【Node】CommonJS二三事

CommonJS 特性

  • 每個文件是一個模塊,有自己的作用域
  • 在模塊內部 module 變量代表模塊本身
  • module.exports 屬性代表模塊對外接口

require 規則

  • / 表示絕對路徑, ./ 表示相對於當前文件

  • 支持js、json、node擴展名,不寫時會依次嘗試

  • 不寫路徑則認爲是build-in 模塊或者各級 node_modules 內的第三模塊

require 特性

  • module 被加載的時候執行,加載後緩存
  • 一旦出現某個模塊被循環加載(互相引用),就只輸出已經執行的部分,還未執行的部分不會輸出

exports 是 module.exports 的簡寫形式,node文件編譯模擬

const exports = module.exports
(
  function (exports,require,module,__filename,__dirname){
    //code...
  }
)

所以我們可以直接在exports上掛載屬性或方法,但是不能改變exports的指向

exports.test = 100   // 可以這樣用

exports = {  //改變指向,錯誤用法
  a: 1,
  b: 2,
  test: 100
}

當我們想要直接導出一個對象時可以用module.exports

module.exports = {
  a: 1,
  b: 2,
  test: 100
}

exports默認爲mudule.exports的快捷方式,可以添加屬性但是不能修改指向,修改指向後就會成爲一個普通對象。因爲在CommonJS中模塊對外的輸出永遠都是module.exports。

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