commonJs

本文讲解了Node.js中模块导出的基本用法,包括单个导出与批量导出的区别,以及如何正确地使用exports与module.exports来暴露模块功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单个导出(exports.test1)、批量导出(module.exports) 使用时一定要注意~

有个exports.default,没记~

// 首先exports相当于一个代理,exports.test1 = 1 等价于 module.exports.test1 = 1

// a.js
exports.test1 = 1;
module.exports = {name:'js file'}; // test1消失了!因为重新赋值了module.exports


// b.js
// 也许你是想这样做
exports.test2 = 2;
module.exports = Object.assign(exports, { name: 'js file' });


// main.js
const { test1 } = require('./a');
const a = require('./a');
console.log(test1, a);

const { test2 } = require('./b');
const b = require('./b');
console.log(test2, b);

 

### CommonJS 规范及其用法 #### 什么是 CommonJSCommonJS 是一种用于服务器端 JavaScript 的模块化规范,最初设计目的是为了统一 Node.js 中的模块定义方式。它通过 `require` 和 `module.exports` 提供了一种同步加载模块的方式[^1]。 --- #### CommonJS 的核心概念 1. **模块定义** - 在 CommonJS 中,每一个文件都被视为一个独立的模块。 - 每个模块都有自己的作用域,默认情况下无法访问其他模块中的变量或函数。 2. **导出模块 (Exporting Modules)** - 使用 `module.exports` 或者 `exports` 来暴露模块的内容给外部使用。 - `module.exports` 可以重新赋值整个对象,而 `exports` 则是对 `module.exports` 的引用,因此修改 `exports` 不会影响原始的 `module.exports` 值。 3. **导入模块 (Importing Modules)** - 使用 `require()` 方法可以加载并返回指定模块的导出内容。 - 加载路径既可以是相对路径(本地模块),也可以是指向内置模块或第三方库的名字。 --- #### 实际案例分析 ##### 创建一个简单的模块 假设我们有一个名为 `math.js` 的文件,其中包含一些数学运算功能: ```javascript // math.js 文件 function add(a, b) { return a + b; } function subtract(a, b) { return a - b; } module.exports.add = add; // 导出 add 函数 module.exports.subtract = subtract; // 导出 subtract 函数 ``` 上述代码中,我们将两个函数分别挂载到 `module.exports` 上面以便后续调用。 --- ##### 引入并使用该模块 在另一个文件中可以通过 `require` 调用这个模块的功能: ```javascript // main.js 文件 const mathModule = require('./math'); // 引入自定义模块 'math' console.log(mathModule.add(5, 3)); // 输出:8 console.log(mathModule.subtract(5, 3)); // 输出:2 ``` 此处需要注意的是,在 `require` 方法里传入的字符串通常是一个相对于当前脚本所在目录的路径名,并且如果省略扩展名 `.js`,Node.js 默认会自动补全。 --- #### 运行时加载机制 不同于 ES6 模块支持静态解析的特点,CommonJS 的模块是在运行时动态执行的。这意味着只有当程序真正运行到某个特定部分才会去读取对应的依赖项[^2]。 例如下面这段代码展示了如何按需加载不同条件下的模块: ```javascript if (process.env.NODE_ENV === 'production') { const prodModule = require('./prod-module'); } else { const devModule = require('./dev-module'); } ``` 这种方式使得开发者能够灵活控制哪些资源应该被实际加载进来,从而优化性能表现。 --- #### 总结 尽管随着 Web 技术的发展,越来越多的人倾向于采用更现代化的标准如 ES6 Modules,但在许多场景尤其是后端服务构建方面,CommonJS 至今仍然占据着重要地位。掌握它的基本原理以及操作技巧对于任何一名从事 JavaScript 开发工作的工程师而言都是非常必要的[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值