【Node.js入门笔记11---模块化】

Node.js入门笔记11

  • Node.js---模块化
  • 一、Node.js模块化学习指南
    • [1. CommonJS模块使用](#1. CommonJS模块使用)
    • [2. ES6模块使用](#2. ES6模块使用)
    • [3. 混合使用CommonJS与ES6模块](#3. 混合使用CommonJS与ES6模块)
    • [4. 核心模块与第三方模块](#4. 核心模块与第三方模块)
    • [5. 模块解析机制](#5. 模块解析机制)

Node.js---模块化

什么是模块化?

将代码拆分为独立的功能块,每个模块负责特定功能,提高可维护性和复用性。编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并互相依赖的多个小模块。

把代码进行模块化拆分的好处 :大家都遵守同样的模块化规范写代码,降低了沟通的成本,极大方便了各个模块之间的相互调用利人利己。

① 提高了代码的复用性

② 提高了代码的可维护性

③ 可以实现按需加载

Node.js 中模块的分类

Node.js 中根据模块来源的不同,将模块分为了 3 大类,分别是:

内置模块(内置模块是由 Node.s 官方提供的,例如 fs、path、http 等)

自定义模块(用户创建的每个 .js 文件,都是自定义模块)

第三方模块(由第三方开发出来的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,使用前需要先下载)

一、Node.js模块化学习指南

1. CommonJS模块使用

Node.js 遵循了 CommonJS 模块化规范,CommonJS 规定了模块的特性和各模块之间如何相互依赖.

CommonJS 规定:

① 每个模块内部,module 变量代表当前模块。

② module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口,

③ 加载某个模块,其实是加载该模块的 module.exports 属性。

导出模块

导出模块:

javascript 复制代码
// math.js
const add = (a, b) => a + b;
module.exports = { add };  // 导出对象
// 或直接导出单个函数
// exports.add = add;

导入模块:

javascript 复制代码
// app.js
const math = require('./math.js');
console.log(math.add(2, 3)); // 输出: 5

模块拆分与复用:

javascript 复制代码
// config.js
module.exports = {
  port: 3000,
  dbUrl: 'mongodb://localhost:27017/mydb'
};

// server.js
const { port, dbUrl } = require('./config');
console.log(`Server running on port ${port}`);

2. ES6模块使用

  1. 启用ES6模块
    方法1:文件后缀名为 .mjs
javascript 复制代码
// utils.mjs
export const capitalize = (str) => str.toUpperCase();

方法2:在 package.json 中设置

javascript 复制代码
{
  "type": "module"
}
  1. 导出与导入
javascript 复制代码
// app.mjs
import { capitalize } from './utils.mjs';
console.log(capitalize('hello')); // 输出: HELLO
  1. 默认导出
javascript 复制代码
// logger.mjs
const log = (message) => console.log(`[INFO] ${message}`);
export default log;

// app.mjs
import logger from './logger.mjs';
logger('Module loaded'); // 输出: [INFO] Module loaded

3. 混合使用CommonJS与ES6模块

  1. 在CommonJS中引入ES6模块
javascript 复制代码
// 需使用动态导入(异步)
import('./utils.mjs').then(({ capitalize }) => {
  console.log(capitalize('hello'));
});
  1. 在ES6模块中引入CommonJS
javascript 复制代码
// utils.cjs
exports.add = (a, b) => a + b;

// app.mjs
import { add } from './utils.cjs';
console.log(add(2, 3)); // 输出: 5
  1. CommonJS vs ES6模块

4. 核心模块与第三方模块

  1. 使用Node.js内置模块
javascript 复制代码
const fs = require('fs'); // CommonJS
// 或
import fs from 'fs';      // ES6
  1. 安装与使用第三方模块
bash 复制代码
npm install lodash       # 安装lodash
javascript 复制代码
const _ = require('lodash');             // CommonJS
// 或
import _ from 'lodash';                  // ES6
console.log(_.chunk([1, 2, 3, 4], 2));  // 输出: [[1,2], [3,4]]

5. 模块解析机制

  1. 查找顺序

    内置模块(如 fs、path) → node_modules → 文件路径模块。

    示例:require('my-module') 会依次查找:

    Node.js核心模块

    ./node_modules/my-module

    上级目录的 node_modules(递归查找)

  2. 文件夹模块

    若路径指向文件夹,Node.js会查找:

    package.json 中的 main 字段指定文件

    默认查找 index.js

相关推荐
灰原A10 分钟前
摆脱拖延症的详细计划示例
笔记
song_ly0017 小时前
深入理解软件测试覆盖率:从概念到实践
笔记·学习·测试
DIY机器人工房8 小时前
[6-2] 定时器定时中断&定时器外部时钟 江协科技学习笔记(41个知识点)
笔记·stm32·单片机·学习·江协科技
DanB249 小时前
Java笔记4
java·开发语言·笔记
UpUpUp……11 小时前
Linux--JsonCpp
linux·运维·服务器·c++·笔记·json
qq_59821175711 小时前
Unity.UGUI DrawCall合批笔记
笔记·unity·游戏引擎
Suckerbin12 小时前
基于HTTP头部字段的SQL注入:SQLi-labs第17-20关
网络·笔记·网络协议·安全·http·网络安全
孤寂大仙v14 小时前
【Linux笔记】——进程信号的产生
linux·服务器·笔记
愚戏师14 小时前
Linux复习笔记(三) 网络服务配置(web)
linux·运维·笔记
scdifsn15 小时前
动手学深度学习12.4.硬件-笔记&练习(PyTorch)
pytorch·笔记·深度学习·缓存·内存·硬盘·深度学习硬件