前端开发工具
- Webpack
- Vite
- Babel
桌面端应用(基于electron框架)
- VSCode - 代码编辑
- Figma - 设计
- Postman - 接口测试
三种Node的模块
- core
- 三方
- 项目
Buffer 缓冲器
/**
* 1 创建
*/
let buf_1 = Buffer.alloc(10);
console.log(buf_1);
let buf_2 = Buffer.allocUnsafe(10000);
console.log(buf_2);
let buf_3 = Buffer.from('a'); // 转二进制存buffer
console.log(buf_3);
/**
* 2 与字符串转换
*/
let buf_4 = Buffer.from([123, 345, 765, 345]);
console.log(buf_4.toString()); // utf-8
/**
* 3 读写
*/
let buf_5 = Buffer.from('abc');
console.log(buf_5[0]); // 十进制
console.log(buf_5[0].toString(2)); // 转为二进制,不同于toString输出
/**
* 4 修改
*/
buf_5[0] = 98;// 修改
console.log(buf_5.toString());
/**
* 5 溢出
*/
let buf_6 = Buffer.from('abc');
console.log(buf_6);
buf_6[0] = 361; // 舍弃高于8位的数字, 361转二进制是 0001 0110 1001 -> 0110 1001 (69)
console.log(buf_6);
/**
* 6 中文 utf-8三个字节
*/
fs - filesystem
DUTY:与硬盘的交互。实现与文件相关操作,e.g. create, delete, rename, move, write, read等
工作模式:同步、异步
异步(下面代码的例子):主线程js走完,输出1,再跑回调判断err
同步:A等B上完厕所一起走
文件写入:
需要持久化保存数据
流式写入、追加写入
文件读取:
同步、异步、流式读取
复制:
同步读写
流式读写(绑定data事件)
rs.pipe(ws)
流式:每次chunk 64 KB,读快于写。
查看内存使用情况:
process.memoryUsage(),返回的对象里的每个属性值,单位是字节
rss - 给这个进程分配了多少物理内存(对象、字符串存于堆内存,变量存于栈内存)
如果需要转换为MB就是/1024/1024
文件移动和重命名:fs.rename(‘旧路径’, ‘新路径’, 回调函数)
删除:
fs.rename(‘路径’, 回调)
fs.rm(‘路径’, 回调)
文件夹
创建(递归创建):
fs.mkdir(路径, (配置), 回调)
recursive:递归创建,根据需求设true
VSCode 设置显示折叠:compact 紧凑模式
读取:
fs.readdir()
删除:
rm删除非空
rmdir删除空,递归删除要recursive设为true
参数:路径,err回调错误对象
查看文件状态
fs.stat()
return: size, birthtime, atime最后访问, mtime最后修改文件, ctime最后修改文件状态
查看文件类型:data.isFile(), data.isDirectory
遍历文件列表:xxx.forEach(item => { });
模板字符串${}:用反引号!!!!1的左边!!!!
相对&绝对:
相对路径 - 参考命令行的工作目录
绝对路径 - 参考__dirname:(所在文件的所在目录的绝对路径),常用于拼接文件名,比如__dirname + ‘/test.html’
统一路径中正反斜线:path.resolve()
Path
parse(路径):路径下的信息
basename:获取文件名
dirname:文件名
extname:扩展名
const fs = require('fs');
const path = require('path');
// 拼接时,统一反斜线和正斜线
console.log(path.resolve(__dirname, './index2.html'));
HTTP
浏览器&服务器:请求和响应的交互
Fiddler:查看报文
请求头查询:MDN WEB DOCS
/**
* 新建文件、写入内容
*/
// 1 导入
const fs = require('fs');
// 2 异步写入 回调函数
fs.writeFile('./test1','fdhsjaklfhdsjalk', err=> {
// 判断err的值查看写入成功与否
if(err) {
console.log('2 writeFile fail');
return;
}
// console.log('2 writeFile success');
});
// console.log('2+');
// 3 同步写入
fs.writeFileSync('./test2', 'dsfhudsaiofhuio');
// 4 (异步)追加写入 \r\n换行
fs.appendFile('./test1', '--------', err => {
if(err) {
console.log('3 file');
return;
}
// console.log('3 success');
});
fs.writeFile('./test2', '11111111', {flag: 'a'}, err => {
if(err) {
console.log('4 fail');
return;
}
// console.log('4 success');
});
// 5 流式写入 - 适合频繁写入
// let ws = fs.createWriteStream('./test3');
// ws.write('1111');
// ws.write('2222');
// ws.close();
// 6 (异步)读取
fs.readFile('./test1', (err, data) => {
if(err) {
console.log('6 read fail');
return;
}
// console.log("6", data.toString());
});
// let data = fs.readFileSync('./test2');
// console.log('6', data.toString());
// 7 流式读取 - 创建读取流对象、绑定data事件、绑定end事件
const rs = fs.createReadStream('./test2');
rs.on('data', chunk => {
//打印chunk,.length看长度 每次84kB
})
rs.on('end', () => {
//
})
// 8 复制 - (1) 同步读,再写 (2)流式读,再写
// 9 查看进程分配的内存
// console.log(process.memoryUsage())
// 10 重命名&移动 - 旧路径,新路径,回调函数
fs.rename('./test1', './test11', err => {
if(err) {
console.log("10 fail");
return;
}
// console.log("10 success");
})
// 11 删除
// fs.unlink('./test11', err => {
// if(err) {
// console.log('11 fail');
// return;
// }
// console.log('11 success');
// });
// fs.rm('./test3', err => {
// if(err) {
// console.log('11-2 fail');
// return;
// }
// console.log('11-2 success');
// })
// 12 文件夹创建 fs.mkdir
// 13 文件夹读取 fs.readdir
fs.readdir('./', (err, data) => {
if(err) {
return;
}
// console.log("13", data);/
})
// 14 删除 fs.rmdir, 递归删除 recursive: true, (路径,err回调)
// rm跟rmdir的区别:rmdir是非空
// 15 读取状态
fs.stat('./test2', (err, data) => {
if(err) {
return;
}
// console.log("15", data);
});
// 16 路径
// fs.writeFileSync('/index1.html', '161');
// fs.writeFileSync('./index2.html', '162');
// fs.writeFileSync('../index3.html', '163');
// fs.writeFileSync('/index1.html', '161');
// console.log("16", __dirname);
// 17 批量对文件进行重命名
const files = fs.readdirSync('./test')
files.forEach(item => {
console.log("item:", item);
let data = item.split('-');
let [num, name] = data;
// console.log(num, name);
if(num<10) {
num = '0' + num;
}
let new_name = num + '-' + name;
console.log("new_name", new_name);
fs.renameSync(`./test/${item}`, `./test/${new_name}`);
});
数据类型
简单
复杂
RPEL环境
console.log() 占位符的使用:%s, %d
包管理工具NPM
验证NPM的安装:npm,npm -v, npm -version
初始化Node应用项目:npm init -y, npm init --yes。使用默认配置参数,生成packa.json配置文件
安装别的包:npm install xxx, --save或-S保存新包信息在json,-dev标明是开发环境
卸载:npm uninstall xxx
模块管理
分类:原生模块,文件模块
导入:require
导出:export
不认识的函数
.filter
.reduce
fs模块中文件系统常见类型
标准文件、目录、UNIX套接字、符号链接、块设备、FIFO、字符设备、
Node安装
全局&___
不同的镜像
清理缓存
查root? -v
save dev 和 __ 的区别