当前位置: 首页 > news >正文

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

在 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

相关文章:

  • 使用Python+OpenCV将多级嵌套文件夹下的视频文件抽帧
  • mybatis-plus开发orm
  • [Git] Git Stash 命令详解
  • Linux-skywalking部署步骤并且添加探针
  • 【设计模式】深入解析代理模式(委托模式):代理模式思想、静态模式和动态模式定义与区别、静态代理模式代码实现
  • 云原生 - Service Mesh
  • 基于SpringBoot的高校学习讲座预约系统-项目分享
  • 滑动窗口学习
  • 【Linux网络】各版本TCP服务器构建 - 从理解到实现
  • 基于Python+Pytest实现自动化测试(全栈实战指南)
  • 从单点突破到链式攻击:XSS 的渗透全路径解析
  • Linux-信号
  • 【产品经理从0到1】用户研究和需求分析
  • Python 设计模式:桥接模式
  • 23种设计模式-结构型模式之桥接模式(Java版本)
  • LangChain4j 搭配 Kotlin:以协程、流式交互赋能语言模型开发
  • 联易融助力乡村振兴,仙湖茶产业焕新机
  • 智能指针之设计模式4
  • 网络安全·第五天·TCP协议安全分析
  • leetcode0207. 课程表-medium
  • “电化长江”的宜昌成果:船舶航运停靠都能用电,助力一江清水向东流
  • 龚正会见巴西里约热内卢州州长克劳迪奥·卡斯特罗
  • 谁为金子疯狂:有人贷款十万博两千,有人不敢再贸然囤货
  • 纪念沈渭滨︱“要把近代史搞得会通”——读《士与大变动时代》随札
  • 今年一季度,上海对东盟进出口总值同比增长7.1%
  • 30小时已过,俄罗斯复活节停火不再延长