详解Nodejs中的模块化
Nodejs是一个基于Chrome V8引擎的JavaScript运行时环境,它允许开发者使用JavaScript在服务器端运行代码。在Nodejs中,模块化是一种组织和重用代码的重要方式。模块化允许我们将代码拆分成小块,使得代码结构更清晰、易于维护,并促进团队合作。
在Nodejs中,模块化是一种组织和重用代码的重要方式。模块化允许我们将代码拆分成小块,使得代码结构更清晰、易于维护,并促进团队合作。本文将详细介绍Nodejs中的模块化,并包含以下内容:
公众号:Code程序人生,个人网站:https://creatorblog.cn
- CommonJS规范:
Nodejs使用的模块化规范。 - 创建和导出模块:如何创建和导出自定义模块。
- 导入和使用模块:如何导入模块并使用其中的功能。
- 内置模块:
Nodejs自带的一些常用模块。 - 第三方模块:如何使用和安装来自
NPM(Node Package Manager)的第三方模块。
CommonJS规范
Nodejs遵循CommonJS规范,该规范定义了如何组织和使用模块。按照CommonJS规范,每个文件都被视为一个独立的模块,模块内部的变量和函数默认情况下是私有的,不会影响其他模块。要使模块中的内容可供其他模块使用,必须显式地将其导出。
CommonJS规范定义了两个核心方法来处理模块:
require: 用于导入模块module.exports: 用于导出模块中的功能
创建和导出模块
让我们来创建一个简单的模块,并导出其中的功能。首先,创建一个名为math.js的文件,其中包含以下代码:
// math.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;// 导出模块中的功能
module.exports = {add,subtract,
};
在上面的代码中,我们定义了两个函数add和subtract,然后使用module.exports将它们导出,以便其他模块可以访问它们。
导入和使用模块
有了math.js模块后,我们可以在另一个文件中导入并使用这些功能。创建一个名为app.js的文件,内容如下:
// app.js
// 导入math.js模块
const { add, subtract } = require('./math');const result1 = add(5, 3);
console.log('加法结果:', result1); // 输出: 加法结果: 8const result2 = subtract(10, 4);
console.log('减法结果:', result2); // 输出: 减法结果: 6
在上面的代码中,我们使用require导入math.js模块,并通过ES6的语法解构出返回对象中的add和subtract函数。然后,我们可以直接使用add和subtract函数,并执行相关的操作。
内置模块
Nodejs提供了许多内置模块,这些模块无需安装即可直接使用。以下是一些常用的内置模块:
fs模块
fs模块很常用,在服务端我们经常需要对文件进行操作,fs模块便是用于处理文件系统操作,例如读取文件、写入文件等。
const fs = require('fs');// 读取文件
fs.readFile('file.txt', 'utf8', (err, data) => {if (err) throw err;console.log(data);
});// 写入文件
fs.writeFile('newFile.txt', 'Hello, Node.js!', (err) => {if (err) throw err;console.log('File written successfully!');
});
http模块
http模块用于创建HTTP服务器和客户端,以便在Nodejs中进行网络通信。
const http = require('http');// 创建HTTP服务器
const server = http.createServer((req, res) => {res.writeHead(200, { 'Content-Type': 'text/plain' });res.end('Hello, Node.js!');
});server.listen(3000, () => {console.log('Server is running on http://localhost:3000/');
});
第三方模块
npm是Nodejs的包管理器,允许开发者安装和管理第三方模块。要使用第三方模块,最好先在项目中初始化一个package.json文件:
npm init
然后,通过npm install命令安装所需的模块:
npm install lodash
现在,我们可以在代码中导入并使用第三方模块:
// 使用lodash模块
const _ = require('lodash');const numbers = [1, 2, 3, 4, 5];
const sum = _.sum(numbers);
console.log('sum:', sum); // 输出: sum: 15
总结
Nodejs中的模块化是一种强大的组织和重用代码的方式。我们可以通过CommonJS规范创建自定义模块,并在其他文件中导入和使用它们。此外,Nodejs还提供了许多内置模块,以及通过npm安装的第三方模块,为开发者提供了丰富的功能和工具。
通过模块化,我们可以更好地组织代码,降低耦合度,提高代码的可维护性,并加速开发过程。在构建复杂的Nodejs应用程序时,模块化是必不可少的技术手段。
相关文章:
详解Nodejs中的模块化
Nodejs是一个基于Chrome V8引擎的JavaScript运行时环境,它允许开发者使用JavaScript在服务器端运行代码。在Nodejs中,模块化是一种组织和重用代码的重要方式。模块化允许我们将代码拆分成小块,使得代码结构更清晰、易于维护,并促进…...
debug思路 - maven构建报错
问题:maven面板中,进行compile、deploy操作时报错。 debug步骤: 1、鼠标右键选择“修改运行配置”。在运行命令中添加参数-X,用于产生执行调试输出。例如:compile -f -X pom.xml。 2、再次进行compile、deploy操作&…...
DSP学习笔记
间接寻址(通过放在辅助寄存器里面,可以对地址包括很多操作,1,-1,/-平移量,辅助寄存器内容的修改是在ARAU0和ARAU1中完成的。分为单操作数和双操作数,有很多模式在ARAU。单操作数间接寻址&#x…...
Java中的Apache Commons Math是什么?
Java中的Apache Commons Math是一个开源的数学库,它提供了许多常用的数学函数和算法,例如线性代数、微积分、统计、插值、拟合等。这个库对于需要处理大量数据的开发者来说非常有用,因为它可以大大简化代码并提高效率。 让我们从新手的角度来…...
规划路线(微信小程序、H5)
//地图getLocationDian(e1, e2) {console.log(e1, e2);let self this;self.xx1 [];self.xx2 [];self.points [];// self.markers[]console.log(self.markers, >marks);// self.$jsonp(url, data).then(re > {// var coors re.result.routes[0].polyline;// for (v…...
【CSS】视频文字特效
效果展示 index.html <!DOCTYPE html> <html><head><title> Document </title><link type"text/css" rel"styleSheet" href"index.css" /></head><body><div class"container"&g…...
linux-MySQL的数据目录
总结: window中的my.ini linux 中 /etc/my.cnfwindow中的D:\soft\mysql-5.7.35-winx64\data linux 中 /var/lib/mysql 1.查找与mysql有关的目录 find / -name mysql [rootVM-4-6-centos etc]# find / -name mysql /opt/mysql /etc/selinux/targeted/tmp/modul…...
AI绘图实战(十二):让AI设计LOGO/图标/标识 | Stable Diffusion成为设计师生产力工具
S:AI能取代设计师么? I :至少在设计行业,目前AI扮演的主要角色还是超级工具,要顶替?除非甲方对设计效果无所畏惧~~ 预先学习: 安装及其问题解决参考:《Windows安装Stable Diffusion …...
机器视觉系统设计:基础知识
机器视觉系统的设计 机器视觉系统集成是将各种不同的组件和子系统组合在一起并使它们充当单个统一系统的过程。 视觉系统集成包括光源,镜头,相机,相机接口和图像处理软件等等。您可能想知道如何设计和实现一个完整,成功的机器视…...
C# Blazor 学习笔记(11):路由跳转和信息传值
文章目录 前言路由跳转测试用例路由传参/路由约束想法更新:2023年8月4日 前言 Blazor对路由跳转进行了封装。 ASP.NET Core Blazor 路由和导航 NavigationManager 类 本文的主要内容就是全局的跳转 路由跳转 路由跳转就要用到NavigationManager 类。 其实最常用…...
Centos 7 安装 Python 时 zlib not available 错误解决
Centos 7 安装 Python 时 zlib not available 错误解决 报错信息, zipimport.ZipImportError: cant decompress data; zlib not available解决方法, sudo yum install -y zlib zlib-devel完结!...
python sqllite基本操作
以下是一些基本的SQLite3操作: 连接到数据库:使用sqlite3.connect()函数连接到数据库,返回一个Connection对象,我们就是通过这个对象与数据库进行交互。例如: import sqlite3 conn sqlite3.connect(example.db)创建…...
记录--基于css3写出的流光登录(注释超详细!)
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 完整效果 对基本的表单样式进行设置 这里设置了基本的表单样式,外层用了div进行包裹,重点是运用了两个i元素在后期通过css样式勾画出一条线没在聚焦文本框的时候线会过度成一个…...
【测试设计】性能测试工具选择:wrk?jmeter?locust?还是LR?
目录 前言 wrk 优点 缺点 jmeter 优点 缺点 locust 优点 缺点 总结 资料获取方法 前言 当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?locust?还是loadrunner呢? 今…...
为什么升级JDK 11后堆外内存使用增长了?
文章首发地址 JDK 11堆外使用增长的原因 JDK 11堆外使用增长的原因可能有以下几个: G1垃圾回收器的默认设置更改: JDK 11中的G1垃圾回收器默认开启了堆外内存分配,以减少Full GC时的STW时间。因此,如果应用程序使用了G1垃圾回收…...
Vue自定义防重复点击指令(v-repeatClick)
!!!Vue防抖节流方法:VUE使用节流和防抖_vue防抖节流_停留的章小鱼的博客-CSDN博客 新建js文件directive.js: // directive.js // 防重复点击(指令实现) //使用: 在需要的按钮中加 v-repeatClick 指令即可 <el-but…...
高频高速板行业现状及市场前景
覆铜板全称为覆铜箔层压板,是由增强材料浸以树脂胶液 , 覆以铜箔 , 经热压而成的一种板状材料。覆铜板是制作印制电路板的核心材料,担负着印制电路板导电、绝缘、支撑三大功能。高频高速电路板有介电常数小且稳定、介质损耗小、传输损耗小等特点。 高频…...
【练手】自定义注解+AOP
在SpringBoot中实现自定义注解:( 声明注解的作用级别以及保留域 ) Target({ElementType.METHOD,ElementType.PARAMETER}) //注解的作用级别 Retention(RetentionPolicy.RUNTIME) //注解的保留域 public interface Log {int value() default 99; }在…...
QComboBox添加样式后,编辑栏背景一直白色问题解决方法。
一、QComboBox样式 /* 未下拉时,QComboBox的样式 */ QComboBox {border: 1px solid gray; /* 边框 */border-radius: 3px; /* 圆角 */padding: 1px 18px 1px 3px; /* 字体填衬 */color: #000;font: normal normal 15px "Microsoft YaHei";backgrou…...
vue动态绑定多个class以及带上三元运算或其他条件
在Vue中,有多种方法可以动态添加样式。下面介绍几种常用的方法: 1. 使用动态绑定的方式: 可以使用:style指令将一个对象作为值传递给它,对象的属性名表示要设置的样式属性,属性值表示要设置的样式值。例如࿱…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
