深入理解node exports和module.exports区别

preview
需积分: 0 0 下载量 38 浏览量 更新于2020-11-22 收藏 27KB PDF 举报
我们只需知道三点即可知道 exports 和 module.exports 的区别了: 1.exports 是指向的 module.exports 的引用 2.module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {} 3.require() 返回的是 module.exports 而不是 exports 所以: • 我们通过 var name ='nswbmw'; exports.name = name; exports.sayName =function(){ console.log(name); } 给 exports 赋值其实是给 在Node.js环境中,模块系统是核心特性之一,用于组织代码并实现代码重用。当我们谈论`exports`和`module.exports`时,这是Node.js模块系统中的两个关键对象,它们经常一起使用,但有着微妙的区别。深入理解这两者的差异对于编写可维护的、高效的Node.js应用至关重要。 1. **exports 是指向 module.exports 的引用** `exports`对象是默认导出对象的一个快捷方式,它最初被设置为指向`module.exports`的引用。这意味着,当你对`exports`进行操作时,实际上是在操作`module.exports`。然而,需要注意的是,如果你直接对`module.exports`赋值,那么`exports`的引用就会失效,因为它不再指向原来的`module.exports`对象。 2. **module.exports 初始值为一个空对象 {}** 当一个模块加载时,Node.js会创建一个`module`对象,并初始化`module.exports`为一个空对象。这样,开发者可以向这个对象添加属性或方法,以便在其他模块中通过`require()`函数导入和使用。 3. **require() 返回的是 module.exports 而不是 exports** 当我们使用`require()`函数加载一个模块时,返回的是`module.exports`对象,而不是`exports`。这意味着,无论我们对`exports`做了什么,最终导出的将是`module.exports`。因此,如果你直接将新的对象赋值给`module.exports`,`exports`的引用将会失效,因为`exports`仍然指向旧的`module.exports`对象。 例如,下面的代码展示了如何使用`exports`和`module.exports`: ```javascript // 假设这是我们的模块文件 (mod.js) var name = 'nswbmw'; // 使用exports exports.name = name; exports.sayName = function() { console.log(name); }; // 等同于 module.exports.name = name; module.exports.sayName = function() { console.log(name); }; ``` 如果在另一个文件中导入这个模块: ```javascript // 另一个文件 (app.js) var mod = require('./mod'); console.log(mod.name); // 输出 'nswbmw' mod.sayName(); // 输出 'nswbmw' ``` 但是,如果我们直接覆盖`module.exports`: ```javascript // mod.js module.exports = { name: 'nswbmw', sayName: function() { console.log(this.name); } }; // app.js var mod = require('./mod'); mod.sayName(); // 输出 'nswbmw' ``` 在这个例子中,`exports`对象不再与`module.exports`关联,所以我们不能通过`exports`来访问或修改导出的对象。 `exports`和`module.exports`之间的关系是,`exports`是`module.exports`的一个快捷方式,而`module.exports`是实际导出的对象。当需要导出复杂对象或覆盖默认导出时,直接操作`module.exports`是更安全的选择。了解这一差异有助于避免潜在的错误和混淆,确保模块之间的交互按预期进行。
weixin_38517212
  • 粉丝: 8
  • 资源: 951
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜