NodeJS内置模块 npm包管理工具 nvm版本管理工具 nrm镜像管理工具

news2024/12/30 2:13:05

Nodejs

下载

下载地址
在这里插入图片描述

node 是什么

node.js 是一个开源的,跨平台的 JavaScript 运行环境

运行 js 文件

node 文件.js

nodemon 监听文件变化

npm i nodemon -g
nodemon 文件名

全局变量

global globalThis

node 中顶级对象为 global ,也可以使用 globalThis 访问顶级对象

__dirname 当前文件夹目录

console.log(__dirname); // `D:\node\src`

__filename 当前文件位置

console.log(__filename); // 'D:\node\src\fs.js'

定时器

console

process

它用于描述当前 Node.js 进程状态的对象,提供了一个与操作系统的简单接口。

Buffer (缓冲区)

用来创建一个专门存放二进制数据的缓存区

创建 Buffer 类

  • Buffer.alloc(size[, fill[, encoding]]): 返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0
  • Buffer.allocUnsafe(size): 返回一个指定大小的 Buffer 实例,但是它不会被初始化,所以它可能包含敏感的数据
  • Buffer.from(array): 返回一个被 array 的值初始化的新的 + Buffer 实例(传入的 array 的元素只能是数字,不然就会自动被 0 覆盖)
  • Buffer.from(arrayBuffer[, byteOffset[, length]]): 返回一个新建的与给定的 ArrayBuffer 共享同一内存的 Buffer。
  • Buffer.from(buffer): 复制传入的 Buffer 实例的数据,并返回一个新的 Buffer 实例
  • Buffer.from(string[, encoding]): 返回一个被 string 的值初始化的新的 Buffer 实例
const buf1 = Buffer.alloc(10);

const buf2 = Buffer.allocUnsafe(10);

const buf3 = Buffer.from([1, 2, 3]);
const buf4 = Buffer.from("tést");
const buf5 = Buffer.from("tést", "latin1");
  • Buffer 转换为 JSON 对象
  • Buffer 转换为 string
buf.toJSON();
buf.toString();

fs 文件系统

writeFile 异步写入

fs.writeFile(file, data[, options], callback)

参数

  • file - 文件名或文件描述符。
  • data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
  • options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’
  • callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

flag

Flag描述
r以读取模式打开文件。如果文件不存在抛出异常。
w以写入模式打开文件,如果文件不存在则创建。
a以追加模式打开文件,如果文件不存在则创建。
const fs = require("fs");

fs.writeFile("./test.txt", "xr", (err) => {
	// err 错误对象 成功 为 null
	if (err) return console.log("写入失败", err);
	console.log("写入成功");
});

writeFileSync 同步写入

fs.writeFileSync("./test.txt", "writeFileSync");

appendFile

\r\n 写入换行

fs.appendFile("./test.txt", "\r\n追加appendFile", (err) => {
	if (err) return console.log("追加失败", err);
	console.log("追加成功");
});

appendFileSync

fs.appendFileSync("./test.txt", "append");

readFile

fs.readFile("./test.txt", (err, data) => {
	if (err) return console.log("读取失败", err);
	// data 是一个 Buffer
	// 使用 toString 方法,把 Buffer 转换为字符串
	console.log(data.toString());
});

readFileSync

const data = fs.readFileSync("./test.txt");

rename 文件重命名和移动

fs.rename("./test.txt", "./testrename.txt", (err) => {
	if (err) return console.log("重命名失败", err);
	console.log("成功");
});

unlink rm 删除文件

fs.unlink("./testrename.txt", (err) => {
	if (err) return console.log("删除失败", err);
	console.log("成功");
});

fs.rm("./test2.txt", (err) => {
	if (err) return console.log("删除失败", err);
	console.log("成功");
});

Stream(流)

Stream 有四种流类型:

  • Readable - 可读操作。
  • Writable - 可写操作。
  • Duplex - 可读可写操作.
  • Transform - 操作被写入数据,然后读出结果。

Stream 常用的事件:

  • data - 当有数据可读时触发。
  • end - 没有更多的数据可读时触发。
  • error - 在接收和写入过程中发生错误时触发。
  • finish - 所有数据已被写入到底层系统时触发。

写入流 createWriteStream

// 创建写入流对象
const ws = fs.createWriteStream("./test.txt");
// 写
ws.write("createWriteStream\n");
ws.write("createWriteStream");
// 关闭通道,可不写
wx.close();

读取流 createReadStream

const rs = fs.createReadStream("./test.txt");
rs.on("data", (chunk) => {
	// chunk 读取的数据流,分段读取
	console.log(chunk);
});

rs.on("end", () => {
	console.log("读取完成");
});

流式操作

const rs = fs.createReadStream("./test.txt");
const ws = fs.createWriteStream("./test2.txt");

rs.on("data", (chunk) => {
	wx.write(chunk);
});

mkdir 创建文件夹

fs.mkdir("./view", (err) => {
	if (err) return console.log("创建失败", err);
	console.log("成功");
});

递归创建文件夹

fs.mkdir("./pages/login", { recursive: true }, (err) => {
	if (err) return console.log("创建失败", err);
	console.log("成功");
});

readdir 读取文件夹

fs.readdir("./", (err, files) => {
	if (err) return console.log("读取失败", err);
	// files 文件夹/文件列表
	console.log("成功", files);
});

rmdir rm 删除文件夹

fs.rmdir("./pages", (err) => {
	if (err) return console.log("删除失败", err);
	console.log("成功");
});

递归删除文件夹 rmdir rm

fs.rm("./pages", { recursive: true }, (err) => {
	if (err) return console.log("删除失败", err);
	console.log("成功");
});

stat 查看资源状态

fs.stat("./test.txt", (err, data) => {
	if (err) return console.log(err);
	console.log(`是文件${data.isFile()}`); // 返回布尔值
	console.log(`是文件${data.isDirectory()}`); // 返回布尔值
});

path 模块

join

const path = require("path");

console.log(path.join("a", "b", "./c", "/d", "..", "e"));
console.log(path.join("a", "b", "./c", "../"));
console.log(path.join("a", "b", "./c", ".."));

.. 切换上一级目录
a\b\c\e
a\b\
a\b

basename

const path = require("path");

const fpath = "a/b.js";
console.log(path.basename(fpath));
console.log(path.basename(fpath, ".js"));

b.js;
b;

extname

const path = require("path");
const fpath = "a/b.js";
console.log(path.extname(fpath));

.js

resolve
给定的路径序列是从右到左处理的 每个后续 path 路径都在前面,直到构造出绝对路径
如果没有 path 传递段,path.resolve()将返回当前工作目录的绝对路径

console.log(path.resolve("/a", "b", "/c"));
console.log(path.resolve("/a", "b", "c"));

D:\c
D:\a\b\c

模块化

// b.js 向外导出多个
exports.a = "aa";
exports.b = "bb";
// a.js 接收
let aExports = require("./b");
console.log(aExports); // 是个对象 { a: 'aa', b: 'bb' }
// b.js 向外导出多个还可以使用  module.exports
module.exports = {
	a: "aa",
	b() {
		console.log("bb");
	},
};
// a.js 接收
let aExports = require("./b");
console.log(aExports); // 是个对象 { a: 'aa', b: [Function: b] }

Node 包管理工具

查看 npm 安装位置

npm root -g

查看版本

npm --version
npm -v

查看 npm 源地址

npm config list

查看当前镜像源

npm config get registry

更改镜像源

npm config set registry https://registry.npm.taobao.org

初始化 package.json

npm init
npm init -y

安装包

npm install dayjs -D --save-dev 开发环境
npm install dayjs -S --save 生产环境
npm install dayjs -g --global 全局安装

npm install jquery@1.11.1

卸载包

npm uninstall dayjs
npm remove dayjs -g

更新包

npm update

nvm

nvm 是一个 nodejs 的版本管理工具

下载地址

https://github.com/coreybutler/nvm-windows/releases
下载 nvm-setup.zip

查看本地安装的所有版本 有可选参数 available 显示所有可下载的版本

nvm list [available]

安装不同的版本

nvm install 18.10.0

使用指定版本

nvm use 18.10.0

下载指定版本

nvm uninstall 18.10.0

开启 node.js 版本管理

nvm on

关闭 node.js 版本管理

nvm off

配置 nvm 镜像

在安装目录下 settings 文件中新增如下两行

node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

nrm

nrm(npm registry manager )是 npm 的镜像源管理工具 快速地在 npm 源间切换

安装

npm install -g nrm

查看可选源列表

nrm ls

查看当前使用源

nrm current

切换源

nrm use taobao

添加源

nrm add
registry 为源名,url 为源地址,nrm add aaa https://aaa.com

删除源

nrm del

测试源速度(响应时间)

nrm test
nrm test

nrm 查看源不带星解决方案

nrm/cli.js
大约 211 行代码 把 && 改为 ||

if (
	hasOwnProperty(customRegistries, name) &&
	(name in registries || customRegistries[name].registry === registry.registry)
) {
	registry[FIELD_IS_CURRENT] = true;
	customRegistries[name] = registry;
}

修改如下

if (
	hasOwnProperty(customRegistries, name) ||
	name in registries ||
	customRegistries[name].registry === registry.registry
) {
	registry[FIELD_IS_CURRENT] = true;
	customRegistries[name] = registry;
}

npx

npx 是 npm5.2 之后发布的一个命令

npx 是为了解决什么

针对 node_modules 目录下.bin 下的可执行文件,如果是项目安装而非全局安装,使用时会非常麻烦,npx 帮助解决这个问题

sequelize-cli 管理数据库
使用的时候需要这样子调用

./node_modules/.bin/sequelize-cli db:seed:all

使用 npx

npx sequelize-cli db:seed:all

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/776093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postgreSQL数据库的安装

文章目录 一、Linux 下安装 postgreSQL 数据库1.1、准备环境1.2、关闭防火墙跟SELinux1.2.1、关闭防火墙 firewalld1.2.2、关闭SELinux 1.3、挂载本地镜像1.4、软件包的下载postgreSQL 一、Linux 下安装 postgreSQL 数据库 1.1、准备环境 操作系统IP应用Red Hat 8192.168.192…

类加载的过程(简单介绍)

目录 一、类加载过程一览 加载: 验证: 准备: 解析: 初始化: 二:类加载器分类 启动类加载器(bootstrap class loader) 扩展类加载器(extensions class loader&…

Nginx外网访问内网如何实现

1、背景 项目要求:将甲方内网的项目能够对外访问,甲方提供一个中间过渡服务器,中间过渡服务器与外网互通,且中间服务器可以访问内网; 外网客户端->中间过渡服务器开放端口:80 中间过渡服务器->内网服…

Cadence Allegro PCB设计88问解析(三十一) 之 Allegro 中 打印(Plot)设置

一个学习信号完整性仿真的layout工程师 在PCB进行投板时,往往会打印一下装备层(Assembly),给贴片,用于核对器件的信息等。下面简单介绍Allegro中打印(Plot)设置。 1. 在Allegro的菜单下选择File命令,点击Plot Setup,会…

无线振弦采集仪应用于岩土工程安全监测的解决方案

无线振弦采集仪应用于岩土工程安全监测的解决方案 随着现代岩土工程的发展,工程规模越来越大,地质灾害频发,安全监测成为岩土工程的重要组成部分。传统的安全监测方法存在一些局限性,如无法实时监测,监测精度不高等问…

途乐证券-沪指震荡跌0.25%,半导体等板块走弱,地产等板块拉升

19日早盘,沪指窄幅震动下探,深成指、创业板指均走低;两市半日成交约4300亿元,北向资金净卖出超40亿元。 截至午间收盘,沪指跌0.25%报3189.81点,深成指跌0.51%,创业板指跌1%;两市合计…

《2023购物中心运营数字化白皮书》正式发布!|爱分析报告

在国家政策鼓励线下实体经济发展、鼓励消费的大背景下,购物中心的发展潜力巨大。但另一方面,随着行业进入存量时代,竞争愈发激烈,品牌扩张乏力,购物中心招商压力增大。以数字化手段加持的精细化运营,成为购…

侦听器watch

在代码逻辑中监听某个数据的变化&#xff0c;这个时候就需要用侦听器 watch 来完成了&#xff1b; 1.data的watch <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&q…

备战秋招 | 笔试强训6

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、十进制变量i的值为100&#xff0c;那么八进制的变量i的值为&#xff08;&#xff09; A. 146 B. 148 C. 144 D. 142 2、执行下面语句后的输出为 int I1; if(I<0)printf("****\n") …

Java框架 Mybatis入门

0目录 Java框架Mybatis 1..框架介绍 2.Mybatis实战 1.框架介绍 补充MVC思想 为什么使用框架&#xff1f; 效率高&#xff0c;成本低 框架是别人写好的&#xff0c;可以直接调用 框架是基于MVC的思想 框架包中含有MVC思想的所有组成模块&#xff1a;控制层&#xff1b;模型…

zabbix 企业级监控(1) 监控自己

重点一 Zabbix简介在企业网络运维过程中&#xff0c;管理员必须随时关注各服务器和网络的运行状况&#xff0c;以便及时发现问题&#xff0c;尽可能减少故障的发生。当网络中的设备&#xff0c;服务器等数量较多时&#xff0c;为了更加方便&#xff0c;快捷的获得监控信息&…

欧姆龙CP系列PLC以太网通讯欧姆龙cp1e怎么用以太网通讯

大家好&#xff0c;今天要和大家分享的是一款在工控领域中非常实用的产品——捷米特JM-ETH-CP转以太网模块。这款模块采用了即插即用的设计&#xff0c;不仅不会占用PLC的通讯口&#xff0c;而且可以通过复用接口让触摸屏与PLC进行通讯。这个设计真的非常巧妙&#xff0c;相信会…

7-Spring cloud之路由网关zuul

7-Spring cloud之路由网关zuul 1. 前言2. 关于zuul2.1 zuul基本原理2.2 为什么要使用zuul 3. 搭建zuul3.1 项目结构3.2 基本配置3.2.1 pom文件3.2.2 yml文件3.3.3 启动类 3.3 测试看效果3.3.1 演示3.3.1 架构图 4. zuul路由访问映射规则4.1 映射服务提供者的服务名4.2 访问加前…

概率论的学习和整理--番外13:一个经典dubo模型的概率计算等

目录 1 经典模型知识科普 1.1 知识来源 1.2 下面是摘取的部分规则 2 这个经典dubo的概率和期望 2.1 网上计算的概率&#xff0c;期望全是负&#xff0c;赌徒悲剧 2.2 为什么会这样呢 3 假设把下注庄家不抽水&#xff0c;获得100%收益而不是95&#xff0c;多少次后可以赢…

桥梁监测需要哪些设备?

随着我国经济的发展&#xff0c;我国桥梁建设也迈上了新的台阶。截至2022年底&#xff0c;我国的公路桥梁总数达到了103.32万座。然而&#xff0c;随着在役桥梁使用时间的增长&#xff0c;承载能力受到荷载、环境以及结构退化等因素的影响&#xff0c;桥梁安全问题日益凸显。桥…

生成式AI管理规则落地 大模型后时代到来

国家网信办等七部门联合颁布的《生成式人工智能服务管理暂行办法》&#xff0c;给中国生成式AI产业树立了发展规范。 这份监管文件的用意并不止于管控&#xff0c;还用大量的笔墨传递出推动产业发展的原则&#xff0c;尤其强调“鼓励生成式人工智能技术在各行业、各领域的创新…

Unity 锚点 Anchors的通俗易懂详解

一、锚点Anchors是什么 当你在Canvas下建子物体的时候&#xff0c;选中子物体就会自带四个△&#xff0c;如下 这个三角也可以是分开的&#xff0c;如下 值得一提的是&#xff0c;这四个三角只能组成一个矩形&#xff0c;或者一个点&#xff0c;例&#xff08;矩形&#xff09…

YOLO数据集实现数据增强的方法(裁剪、平移 、旋转、改变亮度、加噪声等)

前言 最近我在做论文实验时从MSCOCO数据集中筛选了符合条件的1260张图片&#xff0c;但数据样本太少了&#xff0c;于是我就利用数据增强的方法实现了带标签的样本扩充&#xff0c;最后扩充为7560张图片。本文就来记录一下过程&#xff0c;有不懂的地方欢迎留言噢~ 目录 前言…

40.构造函数与析构函数

目录 1.构造函数 构造函数在以下情况被调用&#xff1a; 构造函数可以具有以下特点&#xff1a; 下面是一个简单的示例代码&#xff0c;展示了一个类的构造函数的定义和用法&#xff1a; 构造函数的特征 2.析构函数 析构函数的声明和定义如下&#xff1a; 以下是一…

信息安全-1网络信息安全概述

文章目录 一、概述1.1 网络安全现状 二、 网络信息安全现状与问题三、网络安全防御3.1 基本属性3.2 安全目标和功能 四、基本技术4.1 基本技术4.2 管理内容&方法4.2.3 管理要素&#xff1a; 五、信息安全管理流程六、法律法规 对网络安全和信息化工作作出重要指示 昨天突然…