第四章认识Node.js模块化开发

news/2025/2/12 17:59:00/

Node.js系统模块

续上一篇文章第三章认识Node.js模块化开发-CSDN博客,这次继续来认识和总结以下node的常用模块开发

Node.js系统模块是指Node.js自带的一些模块,这些模块可以直接在Node.js中使用,无需安装其他包。以下是常用的Node.js系统模块:

  1. fs模块:用于处理文件系统。

  2. http模块:用于创建HTTP服务器和客户端。

  3. url模块:用于解析URL和格式化URL。

  4. path模块:用于处理文件路径。

  5. os模块:用于获取服务器的操作系统相关信息。

  6. process模块:用于与当前进程进行交互。

  7. events模块:用于创建和处理事件。

  8. buffer模块:用于处理二进制数据。

  9. stream模块:用于处理大量数据的输入输出流。

  10. crypto模块:用于加密和解密数据。

  11. zlib模块:用于压缩和解压缩数据。

  12. assert模块:用于编写测试用例。

以上模块均可以通过 require() 函数进行引入使用。

Node.js第三方模块

Node.js第三方模块是指由其他开发者或组织编写的、不隶属于Node.js官方维护的模块,这些模块通常都发布在npm(Node Package Manager)上,可以通过npm命令进行安装和使用。

命令格式:npm install 模块名称

常见的Node.js第三方模块有:

  1. Express:一个流行的Web应用程序框架,提供了简单和灵活的API,可以快速搭建Web应用程序和API。

  2. Socket.IO:一个实时的双向通信库,支持Websocket协议和轮询方式,可以实现实时聊天、在线游戏等功能。

  3. Sequelize:一个ORM框架,支持多种数据库,可以方便地进行数据库操作。

  4. Async:用于处理异步操作的工具库,提供了多种函数,可以方便地处理异步流程和控制流。

  5. Nodemailer:一个邮件发送库,可以方便地发送电子邮件。

  6. Moment:一个处理日期和时间的工具库,提供了方便的API,可以方便地进行时间处理。

  7. Lodash:一个JS工具库,提供了多种常用函数,可以方便地进行数组、字符串、对象等操作。

综上所述,Node.js第三方模块可以极大地丰富Node.js的功能和扩展性,提供了更多的选择和便利,可以大大提高Node.js开发效率和编程质量。

Node.js常用开发工具

nodemon工具

nodemon是一个非常实用的Node.js工具,它可以帮助我们在开发过程中自动重启Node.js应用程序,而不需要手动重启。nodemon会监视文件的变化,并自动重新启动Node.js应用程序,从而使开发过程更高效,减少手动重启的麻烦。

要使用nodemon安装它非常简单,只需要在命令行中输入以下命令即可:

npm install -g nodemon

安装完毕后,在命令行中使用nodemon来启动应用程序,就可以自动重启了。例如:

nodemon app.js

这条命令将启动一个名为app.js的Node.js应用程序,并监听该文件的变化,如果文件发生更改,它将自动重新启动。

nrm工具

nrm是一个npm registry manager,它可以帮助我们快速地切换npm镜像源,以加快我们在使用npm工具时的下载速度。在国内由于网络限制,使用默认的npm镜像源会非常慢,因此我们需要使用nrm来快速切换到国内镜像源,例如cnpmjs等。

要使用nrm,需要先全局安装它:

npm install -g nrm

安装完成后,可以使用以下命令查看可用的镜像源:

nrm ls

使用以下命令来切换到指定的镜像源:

nrm use <mirror-name>

例如,要切换到cnpmjs镜像源,可以使用以下命令:

nrm use cnpm
gulp工具

Gulp是一款基于Node.js的自动化构建工具,它可以自动完成开发过程中的一些重复、耗时任务,如代码压缩、文件合并、自动刷新浏览器等,从而提高项目开发效率。

使用Gulp需要先全局安装它:

npm install -g gulp

安装完成后,在项目中安装gulp及相关插件:

npm install --save-dev gulp gulp-concat gulp-uglify gulp-rename

其中,gulp-concat用于合并文件,gulp-uglify用于压缩JavaScript代码,gulp-rename用于重命名文件。

在gulpfile.js文件中编写任务:

const gulp = require('gulp');
const concat = require('gulp-concat');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');// 合并、压缩、重命名JS文件
gulp.task('js', function() {return gulp.src('src/js/*.js').pipe(concat('all.js')).pipe(gulp.dest('dist/js')).pipe(uglify()).pipe(rename({ suffix: '.min' })).pipe(gulp.dest('dist/js'));
});// 默认任务
gulp.task('default', gulp.series('js'));

在命令行中执行gulp任务:

gulp

执行完毕后,即可在dist/js目录中生成合并、压缩、重命名后的JS文件。

Node.js模块加载机制

Node.js采用的是CommonJS模块规范,模块是Node.js中最重要的概念之一。在Node.js中,每个文件都被视为一个独立的模块,每个模块都有自己的作用域,也就是说,在一个模块内定义的变量、函数等只是在该模块内有效,而在其他模块内无法访问。

Node.js模块加载机制的实现基于以下两个原则:

  1. 模块第一次加载时会被缓存,以后再次加载时直接从缓存中读取,不会重复执行。

  2. 模块加载的顺序是按照其被引用的顺序来执行的。

在Node.js中,使用require函数来加载模块。require函数会根据传入的参数,去寻找该模块,并将其返回。在寻找模块的过程中,Node.js会按照以下规则来匹配模块:

  1. 如果参数是一个绝对路径,Node.js会根据该路径直接加载对应的模块。

  2. 如果参数是一个相对路径,Node.js会将其转化为绝对路径后再加载对应的模块。在转换为绝对路径时,会以调用require函数的模块所在的目录作为基准路径。

  3. 如果参数是一个模块名,Node.js会按照以下顺序依次尝试:

    a. 将模块名作为文件名来查找对应的模块文件(比如,模块名为“./hello”,则会查找当前目录下的hello.js文件)。

    b. 将模块名作为目录名来查找对应的模块目录(比如,模块名为“./foo”,则会查找当前目录下的foo目录)。

    c. 在上一步找到的目录中查找package.json文件,读取其中的main字段,然后根据该字段所指定的文件名来加载对应的模块文件。

    d. 如果上述步骤都失败了,就会将模块名作为一个包名来查找对应的模块目录。

在实际开发中,我们可以通过模块化的方式来组织代码,将不同的功能模块分开编写,提高代码的可维护性和可重用性。

项目

好的,以下是一个使用node.js的系统模块、第三方模块和nodemon、nrm、gulp工具和模块加载机制的小项目示例:

  1. 安装nodemon和nrm

在命令行中输入以下命令:

npm install -g nodemon nrm
  1. 添加一个package.json文件并添加依赖

在项目根目录下,输入以下命令创建package.json文件:

npm init

依次输入相关配置信息即可,最后会生成一个package.json文件。

在命令行中输入以下命令,安装需要的依赖:

npm install express body-parser gulp gulp-concat gulp-uglify gulp-rename gulp-clean-css
  1. 创建项目文件结构

在项目根目录下创建以下文件夹:

public/css/style.cssjs/script.js
views/index.html
server.js
gulpfile.js

其中,public文件夹用于存放静态资源文件,views文件夹用于存放HTML模板文件,server.js文件是项目的入口文件,gulpfile.js文件是gulp的配置文件。

  1. 编写代码

在server.js文件中,编写以下代码:

const express = require('express');
const bodyParser = require('body-parser');const app = express();app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));app.use(express.static(__dirname + '/public'));app.get('/', (req, res) => {res.sendFile(__dirname + '/views/index.html');
});const server = app.listen(3000, () => {console.log('Server running on port 3000');
});

在views/index.html文件中,编写以下代码:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Node.js小项目</title><link rel="stylesheet" href="/css/style.css"></head><body><h1>Hello, Node.js!</h1><script src="/js/script.js"></script></body>
</html>

在public/css/style.css文件中,编写以下代码:

body {background-color: #ccc;
}

在public/js/script.js文件中,编写以下代码:

console.log('Hello, Node.js!');

在gulpfile.js文件中,编写以下代码:

const gulp = require('gulp');
const concat = require('gulp-concat');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');
const cleanCSS = require('gulp-clean-css');gulp.task('scripts', () => {return gulp.src('public/js/*.js').pipe(concat('main.js')).pipe(gulp.dest('public/dist')).pipe(rename({ suffix: '.min' })).pipe(uglify()).pipe(gulp.dest('public/dist'));
});gulp.task('styles', () => {return gulp.src('public/css/*.css').pipe(concat('main.css')).pipe(gulp.dest('public/dist')).pipe(rename({ suffix: '.min' })).pipe(cleanCSS()).pipe(gulp.dest('public/dist'));
});gulp.task('watch', () => {gulp.watch('public/js/*.js', gulp.series('scripts'));gulp.watch('public/css/*.css', gulp.series('styles'));
});gulp.task('default', gulp.series('scripts', 'styles', 'watch'));
  1. 运行项目

在命令行中输入以下命令启动项目:

nodemon server.js

在命令行中输入以下命令启动gulp:

gulp

现在你可以在浏览器中访问http://localhost:3000/看到运行效果了。


http://www.ppmy.cn/news/1186175.html

相关文章

实用篇-Gateway网关

前面学的Nacos是对内负载均衡&#xff0c;现在学的Gateway网关是对外负载均衡和校验&#xff0c;不冲突 一、网关的作用 网关功能: 1、身份认证和权限校验 2、服务路由、负载均衡 3、请求限流 在SpringCloud中有两个组件可以实现网关&#xff0c;分别是gateway、zuul Zu…

paddle模型定义

import paddle import paddle.nn as nn # #方法1、内置的模型 # print(飞桨框架内置模型&#xff1a;, paddle.vision.models.__all__) # # 模型组网并初始化网络 # lenet paddle.vision.models.LeNet(num_classes10) # print(type(lenet)) # # 可视化模型组网结构和参数 # pa…

TiDB x 汉口银行丨分布式数据库应用实践

汉口银行是一家城市商业银行&#xff0c;近年来专注科技金融、民生金融等领域。在数据库国产化改造中&#xff0c;汉口银行引入了 TiDB 数据库&#xff0c;并将其应用在重要业务系统&#xff1a;头寸系统中&#xff0c;实现了一栈式的数据服务&#xff0c;同时满足了高并发、低…

matlab 中的基本绘图指令与字符串操作指令

字符串指令 创建字符串 使用单引号将字符序列括起来创建字符串使用单引号创建的字符串是一个字符数组&#xff0c;每个字符都被视为一个独立的元素 可以通过索引访问每个字符使用双引号创建的字符串是一个字符串数组&#xff0c;整个字符串被视为一个元素 无法通过索引访问单个…

人工智能-线性回归的从零开始实现

线性回归的从零开始实现 在了解线性回归的关键思想之后&#xff0c;我们可以开始通过代码来动手实现线性回归了。 在这一节中&#xff0c;我们将从零开始实现整个方法&#xff0c; 包括数据流水线、模型、损失函数和小批量随机梯度下降优化器。 虽然现代的深度学习框架几乎可以…

RemoveEmptyEntries

new char[] { | }, StringSplitOptions.RemoveEmptyEntries System.ArgumentException:DatagridViewComboBoxCell值无效

c# 自定义分表

背景 sqlserver 单表数据过多&#xff0c;数据量已经过亿&#xff0c;查询缓慢&#xff0c;之前是采取手动分表的处理&#xff0c;我是半路接手&#xff0c;现在想对其进行改造&#xff0c;但是项目比较老&#xff0c;无法使用现成的分表插件&#xff0c;我们分表是根据项目来&…

CentOS7安装playwright终极指南

CentOS7安装playwright终极指南 系统环境为CentOS Linux release 7.9.2009 (Core) 最小安装&#xff0c;考虑到playwright的安装需要 python3.7 &#xff0c;本次直接选择安装python3.8。 升级libstdc cd /opt yum -y install wgetwget http://www.vuln.cn/wp-content/uploa…