1. 程式人生 > >module.exports和exports.md

module.exports和exports.md

IV 技術 每一個 test TE node.js his source func

推薦寫法

具體解釋可以往後看。

'use strict'

let app = { // 註冊全局對象
    ...
}

... // 封裝工具箱

exports = module.exports = app // 導出工具箱

原理

  1. 每一個node.js執行文件,都自動創建一個module對象,同時,module對象會創建一個叫exports的屬性,初始化的值是 {}。即:module.exports = {}
  2. exports是引用 module.exports的值
  3. 模塊導出的時候,真正導出的執行是module.exports,而不是exports

1與2的demo

foo.js

'use strict'
module.exports.sayHello = function(){
    console.log(this.name)
}
exports.name = 'foo.js' // exports引用module.exports的值

test.js

'use strict'

let foo = require('./foo')
foo.sayHello()

3的demo

為了驗證真正導出的是module.exports而不是exports,我們對foo.js修改如下:

'use strict'
module.exports = { sayHello:function(){ console.log(this.name) }, name:'module.exports' } exports.sayHello = function(){ console.log('exports') }

test.js的輸出就是:module.exports

因為module.exports的引用改變(js中對象的賦值都是引用),斷開了和exports的連接,而真正導出的只是module.exports

歡迎技術交流,引用請註明出處。

個人網站:哥有內涵.com

Github:godbmw

module.exports和exports.md