我一直在阅读有关Node require
及其exports
is automatically overridden when a module.exports
has data or functionality declared within it的信息。所以让我看看我是否理解正确:我在导出中放入的任何内容都将包含在需要该文件的文件中。
我继承了一些节点文件,一个包含require
个s的主文件,以及每个所需文件的结构:
var obj = {};
obj.prop1 = "some value1";
obj.prop2 = "some value2";
module.exports = exports = obj;
这是在所需文件中导出数据的标准方法吗? a)声明这个(看似多余的obj
)是否明智? ,b)如果没有为exports
或module.exports
分配任何功能,为什么它们都需要指向obj
? c)如果可以覆盖这个中级exports
的目的是什么?这两个对象的用例是什么?
答案 0 :(得分:1)
如果可以覆盖这个中级
exports
的目的是什么?
exports
最初设置为module.exports
的值,可以方便(默认值)使用,因此您无需创建自己的对象来导出值。您的示例基本上等同于使用:
exports.prop1 = "some value1";
exports.prop2 = "some value2";
如果没有为
exports
或module.exports
分配任何功能,为什么他们都需要指向obj
如果要从模块导出obj
,则必须将其分配给module.exports
。这就是Node在模块required
时知道返回哪个值的方式。
exports
的分配不是必需的,但它可以防止像
module.exports = {foo: 42};
// now `module.exports` and `exports` point to different objects
// the following export is just "lost" (ignored)
exports.bar = 21;
分配(module.exports = exports = ...
)确保module.exports
和exports
都指向同一个对象,因此通过任一变量进行的突变都会产生影响。
宣布这个(看似多余的
是明智的obj
)
有多种方法可以达到你想要的效果。我直接使用exports
在顶部显示了一个。你也可以写
module.exports = {
prop1: "some value1",
prop2: "some value2"
};
使用对您有意义的任何内容,并遵守您所遵循的风格指南。
在一天结束时,您要导出的值必须分配到module.exports
。 你如何做取决于你。