module.exports
、export default
和 export
是JavaScript中用于导出模块内容的三种不同方式,它们分别属于不同的模块系统。以下是它们之间的主要区别:
1. 所属模块系统
module.exports
和exports
属于CommonJS模块规范,这是Node.js采用的主要模块系统。export default
和export
属于ES6(ECMAScript 2015)模块规范,是JavaScript语言标准的一部分。
2. 导出方式
module.exports
:- 用于导出模块中的单个对象或函数。
- 可以是任何JavaScript对象、函数、类等。
- 使用
require
函数在其他模块中导入。
export default
:- 用于导出模块中的默认成员。
- 每个模块只能有一个默认导出。
- 导入时不需要使用大括号
{}
,并且可以使用任意名称。 - 通常用于导出单个函数、类或对象。
export
:- 用于导出模块中的命名成员。
- 可以导出多个成员,每个成员都有自己的名称。
- 导入时需要使用大括号
{}
,并且必须使用原始名称或别名。
3. 导入方式
require
(与module.exports
配合使用):- 用于导入CommonJS模块。
- 语法:
const moduleName = require('modulePath');
import
(与export
和export default
配合使用):- 用于导入ES6模块。
- 导入默认导出:
import defaultName from 'modulePath';
- 导入命名导出:
import { memberName1, memberName2 } from 'modulePath';
- 导入所有成员(命名空间导入):
import * as moduleName from 'modulePath';
module.exports示例
文件:math.js
// 定义一个数学运算对象
var MATH = {
pi: 3.14,
e: 2.72,
add: function(a, b) {
return a + b;
}
};
// 使用 module.exports 导出这个对象
module.exports = MATH;
文件app.js
// 使用 require 导入 math.js 模块导出的内容
var MATH = require('./math.js');
console.log(MATH.pi); // 输出: 3.14
console.log(MATH.add(2, 3)); // 输出: 5
export default 示例
math.js
// 定义一个默认导出的函数
export default function add(a, b) {
return a + b;
}
// 使用 import 导入 math.js 模块的默认导出内容,并命名为 add
import add from './math.js';
console.log(add(2, 3)); // 输出: 5
export示例
// 定义并导出多个命名成员
export const pi = 3.14;
export const e = 2.72;
export function multiply(a, b) {
return a * b;
}
// 使用 import 导入 math.js 模块中导出的命名成员
import { pi, multiply } from './math.js';
console.log(pi); // 输出: 3.14
console.log(multiply(2, 3)); // 输出: 6