commonjs是node.js默认模块系统,通过require导入、module.exports导出实现模块通信;exports仅为module.exports的初始引用,仅可添加属性,不可重新赋值,否则导致导出为空对象。

CommonJS 是 Node.js 默认的模块系统,靠 require 和 module.exports 实现模块间通信,语法简洁、运行时生效,适合服务端开发。
怎么用 module.exports 导出内容
每个 JS 文件就是一个模块,私有作用域,外部无法直接访问内部变量。要对外暴露功能,必须通过 module.exports 显式导出:
- 导出单个函数或类:直接赋值,导入后就是该值
- 导出多个内容:赋值一个对象,属性名即为导入时可用的键名
- 可导出任意类型:函数、对象、数组、字符串、数字,甚至
undefined
示例:
// utils.js
const helper = (x) => x * 2;
const VERSION = "1.0";
// 方式一:导出单个函数
module.exports = helper;
// 方式二:导出多个成员(推荐常用)
// module.exports = { helper, VERSION };
怎么用 require 导入模块
require() 是同步执行的,会立即加载并执行目标模块,返回其 module.exports 的值:
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 路径必须写全:相对路径以
./或../开头;绝对路径从磁盘根开始(不常用);包名如lodash会自动在node_modules中查找 - 扩展名可省略:Node.js 会依次尝试
.js→.json→.node - 模块被缓存:同一路径多次
require不会重复执行,返回缓存结果
示例:
// app.js
const helper = require('./utils.js'); // 若 utils.js 导出的是函数
console.log(helper(5)); // 输出 10
// 若 utils.js 导出的是 { helper, VERSION }
// const { helper, VERSION } = require('./utils.js');
exports 是什么?和 module.exports 有什么区别
exports 是 module.exports 的初始引用(指向同一个空对象),仅用于快捷添加属性:
- 可以写
exports.fn = () => {}或exports.num = 42,等价于往module.exports上挂属性 - 但不能写
exports = { a: 1 }—— 这会让exports指向新对象,与module.exports断开,导致模块实际导出为空对象 - 最终决定导出内容的,只有
module.exports
简单记:想导出单个值,用 module.exports = xxx;想导出多个,用 module.exports = { a, b } 或 exports.a = a; exports.b = b(但别重赋值 exports)。
常见问题与注意事项
- 循环依赖时,
require返回的是已执行部分的module.exports,可能为不完整对象 - ESM(
import/export)和 CommonJS 不能混写在同一文件里;若项目启用 ESM(如 package.json 中"type": "module"),则require和module.exports不可用 - 想在 ESM 中导入 CommonJS 模块,可直接
import cjs from './cjs-file.js',它会被自动包装成默认导出
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










