【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

相关推荐
笑衬人心。43 分钟前
Ubuntu 22.04 修改默认 Python 版本为 Python3 笔记
笔记·python·ubuntu
金色光环1 小时前
【Modbus学习笔记】stm32实现Modbus
笔记·stm32·学习
zyxzyx6662 小时前
Flyway 介绍以及与 Spring Boot 集成指南
spring boot·笔记
ncj3934379062 小时前
vscode中对node项目进行断点调试
vscode·node.js
西岭千秋雪_4 小时前
Redis性能优化
数据库·redis·笔记·学习·缓存·性能优化
abigale034 小时前
webpack+vite前端构建工具 -11实战中的配置技巧
前端·webpack·node.js
HuashuiMu花水木4 小时前
Matplotlib笔记4----------图像处理
图像处理·笔记·matplotlib
DES 仿真实践家5 小时前
【Day 11-N22】Python类(3)——Python的继承性、多继承、方法重写
开发语言·笔记·python
IMPYLH11 小时前
Python 的内置函数 reversed
笔记·python
墨菲安全14 小时前
NPM组件 betsson 等窃取主机敏感信息
前端·npm·node.js·软件供应链安全·主机信息窃取·npm组件投毒