面试题答案
一键面试区别
- exports:
exports
是module.exports
的一个引用。它本质上是一个普通的JavaScript对象。- 直接为
exports
赋值(如exports = function() {}
)会切断与module.exports
的联系,导致导出失败,因为Node.js最终是通过module.exports
来确定模块导出内容的。
- module.exports:
- 这是Node.js中定义模块导出的主要方式。可以将任何类型的值(对象、函数、数组等)赋给
module.exports
。 - 当模块被加载时,
module.exports
的值就是该模块的导出内容。
- 这是Node.js中定义模块导出的主要方式。可以将任何类型的值(对象、函数、数组等)赋给
- export default(ES6模块,Node.js在特定版本开始支持):
- 用于ES6模块系统,与Node.js传统的CommonJS模块(
exports
和module.exports
)不同。 - 一个模块只能有一个
export default
,它允许在导入时不需要知道确切的导出名称,提高了灵活性。
- 用于ES6模块系统,与Node.js传统的CommonJS模块(
示例
- 使用exports:
- 导出模块(exampleExports.js):
exports.add = function(a, b) {
return a + b;
};
- 导入模块(mainExports.js):
const example = require('./exampleExports');
console.log(example.add(2, 3));
- 使用module.exports:
- 导出模块(exampleModuleExports.js):
module.exports = function(a, b) {
return a * b;
};
- 导入模块(mainModuleExports.js):
const multiply = require('./exampleModuleExports');
console.log(multiply(2, 3));
- 使用export default(假设在支持ES6模块的Node.js环境):
- 导出模块(exampleES6.js):
const message = 'Hello, ES6 module';
export default message;
- 导入模块(mainES6.js):
import msg from './exampleES6.js';
console.log(msg);
需要注意的是,在Node.js中使用ES6模块,需要将文件后缀名改为.mjs
,或者在package.json
中添加"type": "module"
。