详解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指令将一个对象作为值传递给它,对象的属性名表示要设置的样式属性,属性值表示要设置的样式值。例如࿱…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...