当前位置: 首页 > 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

http://www.dtcms.com/a/148235.html

相关文章:

  • 使用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
  • WordPress 只能访问html文件,不能访问php
  • (最新)华为 2026 届校招实习-硬件技术工程师-硬件通用/单板开发—机试题—(共14套)(每套四十题)
  • flutter 插件收集
  • 联易融出席深圳链主企业供应链金融座谈会,加速对接票交所系统
  • AI 模型在前端应用中的典型使用场景和限制
  • Activity使用优化
  • Elasticsearch性能优化实践
  • Nacos 2.0.2 在 CentOS 7 上开启权限认证(含 Docker Compose 配置与接口示例)
  • linux 手动触发崩溃
  • 马浩棋:产通链CT-Chain 破局不动产 RWA,引领数智金融新变革