Nodejs中exports和module.exports的区别

Nodejs中exports和module.exports的区别

js菜鸟,个人观点,欢迎点评、拍砖: js中exports导出的函数其它文件可以直接调用,不能new;而module.exports导出的函数是对象,需要new一下才能调用该对象的方法。

8 回复

当然可以。以下是你所请求的帖子内容:


Node.js 中 exportsmodule.exports 的区别

在 Node.js 开发中,exportsmodule.exports 是两个经常被混淆的概念。虽然它们都用于模块导出,但它们之间存在一些关键的区别。

1. 基本概念

  • exports: 这是一个指向 module.exports 的引用。
  • module.exports: 这是实际存储导出对象的地方。

简单来说,exports 只是一个指向 module.exports 的引用,因此对 exports 的任何修改都会反映到 module.exports 上。

2. 示例代码

假设我们有一个模块 myModule.js,在这个模块中,我们想要导出一个函数 myFunction

使用 exports 导出

// myModule.js
function myFunction() {
    console.log("Hello from myFunction!");
}

exports.myFunction = myFunction;

在其他文件中使用这个模块:

// main.js
const myModule = require('./myModule');

myModule.myFunction(); // 输出: Hello from myFunction!

使用 module.exports 导出

// myModule.js
function myFunction() {
    console.log("Hello from myFunction!");
}

module.exports = {
    myFunction: myFunction
};

在其他文件中使用这个模块:

// main.js
const myModule = require('./myModule');

myModule.myFunction(); // 输出: Hello from myFunction!

3. 区别总结

  • 使用 exports 导出时,实际上是在修改 module.exports
  • 使用 module.exports 导出时,直接将导出对象赋值给 module.exports
  • exports 本质上只是一个指向 module.exports 的引用,所以两者都可以用来导出模块中的成员。

希望上述内容能帮助你更好地理解 exportsmodule.exports 在 Node.js 中的区别。如果你有任何问题或需要进一步的澄清,请随时提问!


希望这段内容对你有所帮助!


new与不new 只看你是否设置了prototype啊。。。

谁告诉你的。。。

不是这样的,exports只是module.exports的别名,两者几乎等价。

这里说几乎是因为exports只适应于 exports.a = … exports.b = … 这种方式。 如果使用 exports = { … }这种方式会把exports与module之间的关联覆盖掉,也就无法返回了。 所以要使用module.exports = { … }

正解,楼主应该看这个答案

-. - 他们只是指向同一个引用而已。但是你独自覆盖一个的话,两者的联系会被断开

在Node.js中,exportsmodule.exports都用于导出模块中的功能,但它们的工作方式有所不同。

exportsmodule.exports 的区别

  • exports 是一个指向 module.exports 的引用。当你直接使用 exports 来导出属性或方法时,实际上是修改了 module.exports 对象。
  • module.exports 是Node.js中用于暴露模块公共方法和属性的对象。默认情况下,它是一个空对象 {}

示例代码

假设我们有一个名为 myModule.js 的模块:

// myModule.js

// 使用 exports 导出
exports.sayHello = function() {
    console.log("Hello from exports");
};

// 使用 module.exports 导出
module.exports = {
    sayBye: function() {
        console.log("Goodbye from module.exports");
    }
};

然后在另一个文件中导入并使用这些导出的功能:

// main.js

const myModule = require('./myModule');

// 使用 exports 导出的方法
myModule.sayHello(); // 输出: Hello from exports

// 使用 module.exports 导出的方法
myModule.sayBye(); // 输出: Goodbye from module.exports

总结

  • 当你使用 exports 导出某个方法或属性时,实际上是通过 module.exports 进行的。
  • module.exports 允许你完全替换模块的导出对象,从而提供更灵活的导出机制。

通过这种方式,你可以根据实际需求选择使用 exportsmodule.exports 来导出模块的功能。

回到顶部