了解NodeJS中的导出
我不认为我很了解如何exports
在Node.js中工作。 在一些示例代码中,我注意到了以这种方式使用的exports
对象:
exports = mongoose = require('mongoose') mongoose.connect(config.db.uri) exports = Schema = mongoose.Schema
当你使用exports =
幕后两次发生的事情是什么? 在我看来,像“mongoose”不应该出口。 我做了这个快速testing:
var foo , bar exports = foo = 'foo' exports = bar = 'bar' // reports 'bar' only console.log(exports)
第二个testing覆盖第一个输出。
我的猜测是该示例代码的原始作者对module.exports
vs exports
感到困惑。 要使用exports
对象,您必须像这样添加属性:
exports.size = 42;
如果将exports
variables重新分配给一个新对象,则基本上无法访问node.js为您提供的全局导出对象。 如果你这样做两次或三次或N次,效果是一样的。 没用的。 例如:mod_b.js
var realExports = exports; realExports.height = 42; var exports = {}; exports.weight = 43;
并在mod_a.js
var mod_b = require('./mod_b'); console.dir(mod_b);
运行node mod_a.js
,你会得到:
{ height: 42 }
注意height
在那里,但weight
不是。 现在,你可以做的是将module.exports
为一个对象,这是当另一个模块require
你的模块时将返回的对象。 所以你会看到像。
var x = 10; var y = 20; module.exports = {x: x, y: y};
哪个会做你期望的。 这里有一些关于细节的资讯性文章。
Node.js模块 – 导出与module.exports
NodeJS module.exports的目的是什么?你如何使用它?
掌握节点
作为@ Peter-Lyons的扩展,你的例子是有效的,你的testing用例是不正确的。
不build议像这样导出variables,但是通过这样做,您可以将这些variables暴露给全局名称空间。
如test0.js
'use strict'; var assert = require('assert'); var test1 = require('./test1'); assert(globalVar1 === 123); assert(globalVar2.a === 123);
test1.js – 介意缺less'use strict';
exports = globalVar1 = 123; exports = globalVar2 = {a:123};
再一次,这是有效的,但不build议。
干杯。