当前位置: 首页 > 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
  • 抚州一原副县长拉拢公职人员组建“吃喝圈”,长期接受打牌掼蛋等“保姆式”服务
  • 习近平对贵州毕节市黔西市游船倾覆事故作出重要指示
  • 岳伟华任北京大学第六医院院长,陆林院士卸任
  • “五一”假期第四天,全社会跨区域人员流动量预计超2.7亿人次
  • 成为中国骑手孵化器,上海环球马术冠军赛是最好的历练舞台
  • 成为中国骑手“孵化器”,环球马术冠军赛是最好的历练舞台