nodejs模块暴露数据的方式,和引入(导入方式)方式

211 阅读1分钟

在 Node.js 中,模块之间通过 模块导出(exports)模块导入(require 或 ESModule 的 import) 来进行数据和功能的共享。下面我详细总结一下两种主要的模块系统:


一、CommonJS 模块(Node.js 默认使用方式)

✅ 模块导出方式

使用 module.exportsexports 导出数据、函数或对象:

1. 导出单个值(函数/对象/变量):

// math.js
function add(a, b) {
  return a + b;
}
module.exports = add;

2. 导出多个内容:

// math.js
function add(a, b) {
  return a + b;
}
function subtract(a, b) {
  return a - b;
}
module.exports = {
  add,
  subtract
};

也可以使用 exports(注意不能直接给 exports 赋新值):

// math.js
exports.add = function(a, b) { return a + b; };
exports.subtract = function(a, b) { return a - b; };

✅ 模块引入方式

使用 require 引入模块:

// app.js
const math = require('./math');

console.log(math.add(2, 3)); // 5

如果模块只导出一个函数或对象,可以直接使用:

const add = require('./math');
console.log(add(2, 3)); // 5

二、ESModule 模块(现代方式,需使用 .mjs 后缀,或在 package.json 设置 "type": "module"

✅ 模块导出方式

1. 默认导出:

// math.mjs
export default function add(a, b) {
  return a + b;
}

2. 命名导出:

// math.mjs
export function add(a, b) {
  return a + b;
}
export function subtract(a, b) {
  return a - b;
}

也可以统一导出:

function add(a, b) { return a + b; }
function subtract(a, b) { return a - b; }
export { add, subtract };

✅ 模块引入方式

1. 导入默认导出:

// app.mjs
import add from './math.mjs';
console.log(add(2, 3));

2. 导入命名导出:

// app.mjs
import { add, subtract } from './math.mjs';
console.log(add(2, 3));

三、两者混用说明(❗不推荐)

虽然 Node.js 支持 CommonJS 和 ESModule,但混用可能出现问题:

  • CommonJS 可以引入 ESModule,但必须是异步的 import()
  • ESModule 引入 CommonJS 时,只能拿到整个 module.exports 对象。

四、总结对比

特性CommonJS (require)ESModule (import)
默认支持✅ Node.js 默认支持❌ 需配置或使用 .mjs
是否同步✅ 同步❌ 异步
导出方式module.exports, exportsexport, export default
引入方式require()import
应用场景传统 Node.js 项目现代项目、前后端统一、Tree Shaking