使用coffeescript(zappa)在nodejs/commonjs中重新导出模块(mongoose)

rdr*_*rey 1 mongoose node.js coffeescript

我正在使用mongoose @ 2.0.4,我想mongoose.connect()在模块中整齐地抽象掉调用.

所以使用nodejs,我希望以下工作:
myMongoose.coffee:

mongoose = require 'mongoose'
mongoose.connect 'mongodb://localhost/test'
@exports = mongoose
Run Code Online (Sandbox Code Playgroud)

并用于: MyModel.coffee

mongoose = require 'myMongoose'
console.log mongoose #Prints massive object (including Schema)
Schema = mongoose.Schema
console.log Schema # undefined
Run Code Online (Sandbox Code Playgroud)

为什么访问像Schema不起作用的子元素(技术上是构造函数,我认为)?即使添加@exports.Schema = mongoose.Schema到myMongoose.coffee也无法解决问题.

Ray*_*nos 6

你必须设置

module.exports = mongoose

您无法exports使用新对象覆盖.您只能添加属性exports.

这是因为您的模块实际上是以下内容:

(function(require, module, exports, process) {
  // your code
})();
Run Code Online (Sandbox Code Playgroud)

exports 只是一个参数,重新分配它什么都不做.

所以如果要覆盖导出使用module.exports.如果你想扩展exports使用exports.Foo

但是,如果你覆盖module.exports它,最安全的是继续写入module.exports而不是exports