Чтобы расширить ответ Райноса ...
exports
- это в основном псевдоним для module.exports
- я рекомендую просто не использовать его.Вы можете выставлять методы и свойства из модуля, задав для них module.exports
следующим образом:
//file 'module1.js'
module.exports.foo = function () { return 'bar' }
module.exports.baz = 5
Затем вы получите доступ к нему в своем коде:
var module1 = require('module1')
console.log(module1.foo())
console.log(module1.baz)
Вы также можете переопределить module.exports
полностью, чтобы просто предоставить один объект по требованию:
//glorp.js
module.exports = function () {
this.foo = function () { return 'bar' }
this.baz = 5
return this // need to return `this` object here
}
Теперь у вас есть хороший прототип:
var g1 = new require('glorp')()
console.log(g1.foo())
console.log(g1.baz)
Существует множество других способов игры с module.exports
и require
.Просто помните, require('foo')
всегда возвращает один и тот же экземпляр , даже если вы вызываете его несколько раз.
Примечание
Чтобы сработало следующее,
var g1 = new require('glorp')()
console.log(g1.foo())
console.log(g1.baz)
this
должен быть возвращен в функции, которая назначена на module.exports
.В противном случае вы получите TypeError
:
console.log(g1.foo())
^
TypeError: Cannot read property 'foo' of undefined