返回

模块导出的区别指南:module.exports、exports和export

前端

在Node.js中,我们经常需要将一个模块的代码导入到另一个模块中,以复用代码或创建模块化的应用程序。Node.js提供了三种主要的模块导出方式:module.exports、exports和export。这三种方式各有其特点和适用场景,掌握它们的区别对编写高质量的Node.js代码至关重要。

module.exports

module.exports是一个对象,用于导出模块的对外接口。它是一个指向导出对象内存地址的引用,因此对module.exports的修改将直接影响导出的对象。

exports

exports也是一个对象,它本质上是module.exports的别名。因此,对exports的修改也将直接影响module.exports。但是,exports只允许添加和修改属性,不允许重新赋值。

export

export是ES6引入的一种新的模块导出方式,它允许将变量、函数和类等直接导出,而无需使用module.exports或exports。export导出的变量、函数和类可以被其他模块直接导入。

总结

特性 module.exports exports export
语法 对象 对象(module.exports的别名) 直接导出
作用域 模块作用域 模块作用域 模块作用域
可修改性 可重新赋值 可添加和修改属性 不可重新赋值
使用场景 导出模块的对外接口 修改导出的对象 直接导出变量、函数和类

示例

以下示例演示了这三种导出方式的使用:

// 使用module.exports导出模块
module.exports = {
  name: 'John',
  age: 30
};

// 使用exports导出模块
exports.name = 'John';
exports.age = 30;

// 使用export导出模块
export const name = 'John';
export const age = 30;

在其他模块中,我们可以使用以下方式导入这三个模块:

// 导入module.exports导出的模块
const person = require('./person.js');

// 导入exports导出的模块
const { name, age } = require('./person.js');

// 导入export导出的模块
import { name, age } from './person.js';

通过上面的示例,我们可以看到,三种导出方式都可以将模块的代码导出到其他模块中。但是,它们在语法、作用域、可修改性和使用场景上存在一些差异。在实际开发中,我们可以根据需要选择合适的导出方式。

扩展阅读