Node.js--exports 对象详解:用法、示例与最佳实践

目录

[1. exports 对象介绍](#1. exports 对象介绍)

[2. 基础示例:使用 exports 导出对象](#2. 基础示例:使用 exports 导出对象)

文件名:math.js(JavaScript)

[3. 在另一个文件中使用 require 进行导入](#3. 在另一个文件中使用 require 进行导入)

文件名:app.js(JavaScript)

[4. 运行程序](#4. 运行程序)

[5. exports 的限制](#5. exports 的限制)

[6. 其他 exports 使用方式](#6. 其他 exports 使用方式)

示例1:导出单个函数

示例2:导出类

[7. 结论](#7. 结论)

1. exports 对象介绍

在 Node.js 中,exportsmodule.exports 的一个引用(别名),用于导出模块的内容。

主要特点:

  • exportsmodule.exports 最初指向同一个对象。
  • 只能使用 exports.属性 = 值 形式来添加属性,不能直接赋值 exports = {...},否则会断开与 module.exports 的关联。
  • 推荐使用 module.exports,因为它更清晰,避免 exports 赋值带来的问题。

2. 基础示例:使用 exports 导出对象

创建一个 math.js 文件,使用 exports 对象导出数学运算函数。

文件名:math.js(JavaScript)

javascript 复制代码
// math.js
exports.add = (a, b) => a + b;
exports.subtract = (a, b) => a - b;
exports.multiply = (a, b) => a * b;
exports.divide = (a, b) => (b !== 0 ? a / b : "Error: Division by zero");

3. 在另一个文件中使用 require 进行导入

创建 app.js 文件,并使用 require 来引入 math.js 模块。

文件名:app.js(JavaScript)

javascript 复制代码
// app.js
const math = require("./math"); // 引入 math.js 模块

console.log("加法 5 + 3 =", math.add(5, 3)); 
console.log("减法 10 - 4 =", math.subtract(10, 4)); 
console.log("乘法 6 * 7 =", math.multiply(6, 7)); 
console.log("除法 20 / 5 =", math.divide(20, 5)); 
console.log("除法 10 / 0 =", math.divide(10, 0)); // 测试除数为0的情况

4. 运行程序

在终端(Terminal 或 CMD)中运行:

bash 复制代码
node app.js

运行结果:

bash 复制代码
加法 5 + 3 = 8
减法 10 - 4 = 6
乘法 6 * 7 = 42
除法 20 / 5 = 4
除法 10 / 0 = Error: Division by zero

5. exports 的限制

错误示例(不建议使用):

javascript 复制代码
// math.js
exports = {  // ❌ 这样会导致导出失败
    add: (a, b) => a + b,
    subtract: (a, b) => a - b
};

原因: 这样做会让 exports 变量指向一个新对象,但 module.exports 仍然指向原始对象,导致 require('./math') 取不到新赋值的对象。


6. 其他 exports 使用方式

示例1:导出单个函数

文件名:greet.js(JavaScript)

javascript 复制代码
// greet.js
exports.greet = function(name) {
    return `Hello, ${name}!`;
};

文件名:app.js(JavaScript)

javascript 复制代码
// app.js
const greetModule = require("./greet");
console.log(greetModule.greet("鼠鼠"));

运行结果:

bash 复制代码
Hello, 鼠鼠!

示例2:导出类

文件名:Person.js(JavaScript)

javascript 复制代码
// Person.js
exports.Person = class {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    introduce() {
        return `My name is ${this.name}, I am ${this.age} years old.`;
    }
};

文件名:app.js(JavaScript)

javascript 复制代码
// app.js
const { Person } = require("./Person");

const person1 = new Person("Alice", 25);
console.log(person1.introduce());

const person2 = new Person("Bob", 30);
console.log(person2.introduce());

运行结果:

javascript 复制代码
My name is Alice, I am 25 years old.
My name is Bob, I am 30 years old.

7. 结论

  • exportsmodule.exports 的一个引用,默认指向相同的对象。
  • 只能使用 exports.属性 = 值 形式,不能直接 exports = {...} 赋值,否则会失去作用。
  • 一般推荐使用 module.exports,避免 exports 赋值带来的问题。
  • 适用于导出多个函数或对象时使用。

希望这篇文章能帮助你理解 exports 的用法!

相关推荐
GISer_Jing2 小时前
前端面试通关:Cesium+Three+React优化+TypeScript实战+ECharts性能方案
前端·react.js·面试
落霞的思绪3 小时前
CSS复习
前端·css
咖啡の猫5 小时前
Shell脚本-for循环应用案例
前端·chrome
百万蹄蹄向前冲7 小时前
Trae分析Phaser.js游戏《洋葱头捡星星》
前端·游戏开发·trae
朝阳5818 小时前
在浏览器端使用 xml2js 遇到的报错及解决方法
前端
GIS之路8 小时前
GeoTools 读取影像元数据
前端
ssshooter9 小时前
VSCode 自带的 TS 版本可能跟项目TS 版本不一样
前端·面试·typescript
你的人类朋友9 小时前
【Node.js】什么是Node.js
javascript·后端·node.js
Jerry9 小时前
Jetpack Compose 中的状态
前端
weixin_3077791310 小时前
VS Code配置MinGW64编译SQLite3库
开发语言·数据库·c++·vscode·算法