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

Nodejs

下载

下载地址
NodeJS内置模块 npm包管理工具 nvm版本管理工具 nrm镜像管理工具_第1张图片

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 [email protected]

卸载包

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

你可能感兴趣的:(node,npm,前端,node.js)