如何从所需的节点文件正确导出

时间:2015-09-15 16:13:55

标签: javascript node.js

我一直在阅读有关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)如果没有为exportsmodule.exports分配任何功能,为什么它们都需要指向obj? c)如果可以覆盖这个中级exports的目的是什么?这两个对象的用例是什么?

1 个答案:

答案 0 :(得分:1)

  

如果可以覆盖这个中级exports的目的是什么?

exports最初设置为module.exports的值,可以方便(默认值)使用,因此您无需创建自己的对象来导出值。您的示例基本上等同于使用:

exports.prop1 = "some value1";
exports.prop2 = "some value2"; 
  

如果没有为exportsmodule.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.exportsexports都指向同一个对象,因此通过任一变量进行的突变都会产生影响。

  

宣布这个(看似多余的obj

是明智的

有多种方法可以达到你想要的效果。我直接使用exports在顶部显示了一个。你也可以写

module.exports = {
  prop1: "some value1",
  prop2: "some value2" 
};

使用对您有意义的任何内容,并遵守您所遵循的风格指南。

在一天结束时,您要导出的值必须分配到module.exports你如何做取决于你。