【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

相关推荐
sakabu44 分钟前
Linux安装MySQL数据库并使用C语言进行数据库开发
linux·c语言·数据库·笔记·mysql·数据库开发
lwewan2 小时前
26考研——图_图的代码实操(6)
数据结构·笔记·考研·算法·深度优先
程序员Linc3 小时前
《数字图像处理》第三章 3.8 基于模糊技术的图像强度变换与空间滤波学习笔记
笔记·学习·数字图像处理·模糊技术·强度变换·空间滤波
vv啊vv4 小时前
使用android studio 开发app笔记
android·笔记·android studio
想拿高薪的韭菜5 小时前
计算机网络高频(五)HTTP和HTTPS
经验分享·笔记·计算机网络·课程设计
几何心凉5 小时前
如何在Webpack中配置别名路径?
前端·webpack·node.js
Wallace Zhang6 小时前
STM32F103_LL库+寄存器学习笔记02 - 开启SysTick(滴答定时器)中断
笔记·stm32·学习
银迢迢7 小时前
java基础自用笔记:异常、泛型、集合框架(List、Set、Map)、Stream流
java·笔记
IT19957 小时前
uniapp笔记-swiper组件实现轮播图
前端·javascript·笔记·uni-app