Node.js模块化的基本概念和分类及使用方法

简介: Node.js模块化的基本概念和分类及使用方法

一、模块概念

Node.js是一个非常流行的服务器端JavaScript运行时环境,它可以在我们的服务器端直接运行JavaScript代码。在Node.js中,模块是一种用于组织和封装代码的技术。


模块:指解决一个复杂问题的时候,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来讲,模块是可以组合、分解和更换的单元。


在编辑领域中的模块,就是遵守固定的规则,把一个大文件拆成独立并且相互依赖的多个小模块。


代码进行模块拆分的好处有:提高代码的复用性,提高代码的可维护性,可以实现按需加载。


二、模块分类

1、内置模块

内置模块是由Node.js官方提供的

  • fs 模块:用于文件操作,包括读取文件、写入文件、创建目录、删除文件等。
  • http 模块:用于创建 HTTP 服务器和客户端,可以处理 HTTP 请求和响应。
  • https 模块:与 http 模块类似,但支持安全的 HTTPS 协议。
  • path 模块:用于处理文件路径,包括路径解析、拼接、规范化等。
  • events 模块:用于实现事件驱动的编程,可以创建和处理事件。
  • stream 模块:用于处理流式数据,可以读取和写入可流式的数据。
  • util 模块:包含一些实用工具函数,如继承、类型判断、错误处理等。
  • crypto 模块:提供加密和解密功能,包括哈希算法、对称加密和非对称加密等。
  • os 模块:提供与操作系统相关的功能,如获取操作系统信息、处理文件路径等。
  • querystring 模块:用于解析和序列化 URL 查询字符串。
2、自定义模块

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

3、第三方模块

由第三方开发出来的模块,使用前需先下载,如:md5


三、加载模块

使用 require() 方法,可以加载需要的内置模块、自定义模块、第三方模块进行使用


注:使用 require() 方法加载其他模块时,会执行被加载模块中的代码。


模块在第一次加载后会被缓存,即多次调用require()方法不会导致模块的代码被执行多次。


不论是内置模块,用户自定义模块或第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率。

1、加载内置模块

内置模块是由node.js官方提供的模块,内置模块的加载优先级最高。

const fs = require("fs");
2、加载自定义模块

当调用require()方法加载自定义模块时,必须指定以./或…/开头的路径标识符,如果没有路径标识符,则node.js会把它当作内置模块或第三方模块加载。

  • 模块名中的.js可省略
  • 相对路径与绝对路径皆可
const custom = require("./custom.js");

引入

require("./custom.js");


当我们在一个模块中引入其他模块时,我们可以直接使用被引入模块中导出的内容,而不需要使用模块名进行访问。


3、加载第三方模块

如果传递给require()的不是node.js的一个内置模块,也没有路径标识符,则node.js会从当前模块的父目录开始,尝试从/node_modules文件夹中加载第三方模块。


如果没有找到对应的第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录中。

即从当前目录开始,寻找node_modules文件夹,找不到就从上级目录中找,直到文件根目录中,找到后就会加载对应的第三方模块。

const moment = require("moment")


四、导出模块

导出方法允许我们从一个模块中暴露出我们所希望的部分,以供其他模块使用。在Node.js中,模块中的导出方法通常有以下几种方式。

1、exports

该方法可以通过添加属性的方式导出,并且可以导出多个成员;

Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。

//hello.js
exports.world = () => {
    console.log('Hello World')
}

exports.add = (a, b) => {
    return a + b;
}

exports.person = {
    name: '张三',
    age: 20
};

exports.name = 'zrl'

在其他模块中使用

//index.js
const {world,add,name,person} = require('./world')
world()
console.log(add(2,3));
console.log(name);
console.log(person);
2、module.exports

最常用的导出方式是module.exports。通过将module.exports设置为一个函数、对象、类、常量等,我们可以在其他模块中使用它。只能导出单个成员。

  • 例一
//world.js
const Hello = ()=>{
    let name
    this.setName = (val)=>{
        name = val
    }
    this.sayHello = ()=>{
        console.log("Hello " + name)
    }
}

module.exports = Hello

在其他模块中使用

const world = require('./world')
let world = new world()
world.setName('World')
world.sayHello()
  • 例二
//common.js
const sum = (a, b) => {
  return a + b;
}

const PI = 3.14;

function subtract(a, b) {
  return a - b;
}

module.exports = {
  add: add,
  subtract,
  PI
};

在其他模块中使用

const {sum,PI,subtract} = require('./common')
console.log(add(1, 2)); // 输出 3
console.log(subtract(5, 3)); // 输出 2
console.log(PI); // 输出 3.14


五、模块作用域

模块作用域:模块作用域和函数作用域类似,在自定义模块中定义的变量、方法只能在当前模块内被访问,这种模块级别的访问限制。模块作用域的好处可以防止全局变量污染的问题。

// 模块作用域
const username = "张三";
function funcs(){
    console.log("大家好,我叫" + username);
};
目录
相关文章
|
5月前
|
JavaScript UED
js之模块化(2)
js之模块化(2)
|
6月前
|
JavaScript 前端开发 编译器
解锁JavaScript模块化编程新纪元:从CommonJS的基石到ES Modules的飞跃,探索代码组织的艺术与科学
【8月更文挑战第27天】随着Web应用复杂度的提升,JavaScript模块化编程变得至关重要,它能有效降低代码耦合度并提高项目可维护性及扩展性。从CommonJS到ES Modules,模块化标准经历了显著的发展。CommonJS最初专为服务器端设计,通过`require()`同步加载模块。而ES Modules作为官方标准,支持异步加载,更适合浏览器环境,并且能够进行静态分析以优化性能。这两种标准各有特色,但ES Modules凭借其更广泛的跨平台兼容性和现代语法逐渐成为主流。这一演进不仅标志着JavaScript模块化的成熟,也反映了整个JavaScript生态系统的不断完善。
68 3
|
5月前
|
JavaScript 前端开发 开发者
js之模块化(1)
js之模块化(1)
|
3月前
|
存储 JavaScript 前端开发
decimal.js库的安装和使用方法
【10月更文挑战第24天】decimal.js 是一个非常实用的高精度计算库,通过合理的安装和使用,可以在 JavaScript 中实现精确的数值计算和处理。你可以根据具体的需求和项目情况,灵活运用该库来解决数字精度丢失的问题。
|
5月前
|
JavaScript
Nodejs的模块化概述
详细解释Node.js的模块化概念,包括CommonJS规范、模块的引用、定义、标识,以及如何在Node.js中实现模块化,并通过示例代码展示了如何创建和使用模块,以及"module.exports"和"exports"的区别。
52 1
Nodejs的模块化概述
|
4月前
|
缓存 资源调度 JavaScript
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
144 0
|
4月前
|
JavaScript 前端开发 容器
js之弹性布局使用方法
js之弹性布局使用方法
50 0
|
5月前
|
JavaScript
js之模块化(3)
js之模块化(3)
|
6月前
|
存储 缓存 JavaScript
JavaScript——请列出目前主流的 JavaScript 模块化实现的技术有哪些?说出它们的区别?
JavaScript——请列出目前主流的 JavaScript 模块化实现的技术有哪些?说出它们的区别?
42 0
|
6天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。

热门文章

最新文章

  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    23
  • 2
    Node.js 中实现多任务下载的并发控制策略
    32
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    25
  • 4
    【JavaScript】深入理解 let、var 和 const
    48
  • 5
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    44
  • 6
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    53
  • 7
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    55
  • 8
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    71
  • 9
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55
  • 10
    JavaWeb JavaScript ③ JS的流程控制和函数
    62