目录
path模块
path模块在不同的操作系统是有差异的(windows | posix)
posix表示可移植操作系统接口,也就是定义了一套标准,遵守这套标准的操作系统有(unix,like unix,linux,macOs,windows wsl)
为什么要定义这套标准?
比如在Linux系统启动一个进程需要调用fork
函数,在windows启动一个进程需要调用creatprocess
函数,这样就会有问题,比如我在linux写好了代码,需要移植到windows发现函数不统一,posix标准的出现就是为了解决这个问题
Windows 并没有完全遵循 POSIX 标准。Windows 在设计上采用了不同于 POSIX 的路径表示方法。
在 Windows 系统中,路径使用反斜杠(\
)作为路径分隔符。这与 POSIX 系统使用的正斜杠(/
)是不同的。这是 Windows 系统的历史原因所致,早期的 Windows 操作系统采用了不同的设计选择。
1. path.basename()
返回的是给定路径中的最后一部分
console.log(path.basename("D:/node_base/testPath.js"))
结果:testPath.js
2. path.dirname
这个API和basename正好互补
path.dirname("D:/node_base/testPath.js")
结果:D:/node_base
dirname API 返回 /aaaa/bbbb/cccc 除了最后一个路径的其他路径。
basename API 返回 最后一个路径 index.html
3. path.extname
这个API 用来返回扩展名例如/bbb/ccc/file.txt 返回就是.txt
path.extname("D:/node_base/testPath.js")
返回最后一个点后面的内容
4. path.join
这个API 主要是用来拼接路径的
console.log(path.join("D:/node_base","testPath.js"))
结果:D:\node_base\testPath.js
也可以支持../ ./等操作
例:
console.log(path.join("D:/node_base/view","../","testPath.js"))
结果还是和上面的一样
5. path.resolve
用于将相对路径解析并且返回绝对路径
如果传入了多个绝对路径 它将返回最右边的绝对路径
例:
console.log(path.resolve("./index.js"))
结果:D:\item\node_base\index.js
path.resolve('/aaa','/bbb','/ccc') 返回/ccc
6. path.parse path.format
path.format 和 path.parse 正好互补
parse
用于解析文件路径。它接受一个路径字符串作为输入,并返回一个包含路径各个组成部分的对象
console.log(path.parse(__dirname + "/index.js"))
{
root: 'D:\\',
dir: 'D:\\item\\node_base',
base: 'index.js',
ext: '.js',
name: 'index'
}
format 正好相反 在把对象转回字符串
OS模块
Nodejs os 模块可以跟操作系统进行交互
1. 获取操作系统的一些信息
(1)os.platform()
返回标识为其编译 Node.js 二进制文件的操作系统平台的字符串。 该值在编译时设置。 可能的值为 'aix'
、'darwin'
、'freebsd'
、'linux'
、'openbsd'
、'sunos'
、以及 'win32'
实际案例:
按照不同的操作系统,执行shell命令
const os = require('os');
const {exec } = require('child_process');
const osName = os.platform();
function open(url) {
if(osName === 'win32') {
exec(`start ${url}`);
} else if (osName === 'darwin') {
exec(`open ${url}`);
} else if (osName === 'linux') {
exec(`xdg-open ${url}`);
}
}
open("http://www.baidu.com")
(2)os.release
返回操作系统的版本例如10.xxxx win10
如:10.0.22631
(3)os.homedir()
返回用户目录
原理就是 windows echo %USERPROFILE%
posix $HOME
如:C:\Users\wanj
(4) os.type()
它在 Linux 上返回 'Linux'
,在 macOS 上返回 'Darwin'
,在 Windows 上返回 'Windows_NT'
(5)os.arch()
返回cpu的架构 可能的值为 'arm'
、'arm64'
、'ia32'
、'mips'
、'mipsel'
、'ppc'
、
'ppc64'
、's390'
、's390x'
、以及 'x64'
2. 获取CPU的线程以及详细信息
(1)os.cpus()
{
model: 'Intel(R) Core(TM) i7- CPU @ 2.20Hz',
speed: ,
times: {
user: 2361078,
nice: 0,
sys: 1185984,
idle: 85513343,
irq: 12453
}
}
model
: 表示CPU的型号信息
speed
: 表示CPU的时钟速度
times
: 是一个包含CPU使用时间的对象,其中包含以下属性:
user
: 表示CPU被用户程序使用的时间(以毫秒为单位)。nice
: 表示CPU被优先级较低的用户程序使用的时间(以毫秒为单位)。sys
: 表示CPU被系统内核使用的时间(以毫秒为单位)。idle
: 表示CPU处于空闲状态的时间(以毫秒为单位)。irq
: 表示CPU被硬件中断处理程序使用的时间(以毫秒为单位)。
(2) os.cpus.length
可以获取到cpu的线程
3. 获取网络信息
os.networkInterfaces()
{
lo: [
{
address: '127.0.0.1',
netmask: '255.0.0.0',
family: 'IPv4',
mac: '00:00:00:00:00:00',
internal: true,
cidr: '127.0.0.1/8'
},
{
address: '::1',
netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
family: 'IPv6',
mac: '00:00:00:00:00:00',
scopeid: 0,
internal: true,
cidr: '::1/128'
}
],
eth0: [
{
address: '192.168.1.108',
netmask: '255.255.255.0',
family: 'IPv4',
mac: '01:02:03:0a:0b:0c',
internal: false,
cidr: '192.168.1.108/24'
},
{
address: 'fe80::a00:27ff:fe4e:66a1',
netmask: 'ffff:ffff:ffff:ffff::',
family: 'IPv6',
mac: '01:02:03:0a:0b:0c',
scopeid: 1,
internal: false,
cidr: 'fe80::a00:27ff:fe4e:66a1/64'
}
]
}
address
: 表示本地回环接口的IP地址,这里是'127.0.0.1'
。netmask
: 表示本地回环接口的子网掩码,这里是'255.0.0.0'
。family
: 表示地址族(address family),这里是'IPv4'
,表示IPv4地址。mac
: 表示本地回环接口的MAC地址,这里是'00:00:00:00:00:00'
。请注意,本地回环接口通常不涉及硬件,因此MAC地址通常为全零。internal
: 表示本地回环接口是否是内部接口,这里是true
,表示它是一个内部接口。cidr
: 表示本地回环接口的CIDR表示法,即网络地址和子网掩码的组合,这里是'127.0.0.1/8'
,表示整个127.0.0.0
网络。
process
process
是Nodejs操作当前进程和控制当前进程的API,并且是挂载到globalThis下面的全局API
api的介绍
(1)process.arch
和之前的os.arch一样
(2)process.cwd
返回当前的工作目录 例如在 F:\project\node> 执行的脚本就返回这个目录 也可以和path拼接代替__dirname使用——
也就是和__dirname的作用是一样的,但是在esm模式下无法使用__dirname所以就会采用process.cwd代替
(3)process.argv
这是process的一个属性
获取执行进程后面的参数 返回是一个数组 后面到命令行交互工具的时候会很有用,各种cli脚手架也是使用这种方式接受配置参数例如webpack
node .\testPath.js --seva
[ 'D:\\node\\node.exe', 'D:\\item\\node_base\\testPath.js', '--seva' ]
第一个元素为,解析他的文件路径
第二个元素为:调用这个属性的文件路径
第三个元素为:执行命令后携带的参数
(4)process.memoryUsage
用于获取当前进程的内存使用情况。该方法返回一个对象,其中包含了各种内存使用指标,如 rss(Resident Set Size,常驻集大小)、heapTotal(堆区总大小)、heapUsed(已用堆大小)和 external(外部内存使用量)等
{
rss: 30932992, // 常驻集大小 这是进程当前占用的物理内存量,不包括共享内存和页面缓存。它反映了进程实际占用的物理内存大小
heapTotal: 6438912, //堆区总大小 这是 V8 引擎为 JavaScript 对象分配的内存量。它包括了已用和未用的堆内存
heapUsed: 5678624, //已用堆大小
external: 423221, //外部内存使用量 这部分内存不是由 Node.js 进程直接分配的,而是由其他 C/C++ 对象或系统分配的
arrayBuffers: 17606 //是用于处理二进制数据的对象类型,它使用了 JavaScript 中的 ArrayBuffer 接口。这个属性显示了当前进程中 ArrayBuffers 的数量
}
(5)process.exit
将强制进程尽快退出,即使仍有未完全完成的异步操作挂起
例:
setTimeout(() => {
console.log('Hello World')
},2000)
setTimeout(() => {
process.exit()
},500)
process.on('exit', () => {
console.log('Goodbye World')
})
有on方法可以去监听事件
(6)process.kill
与exit类似,kill用来杀死一个进程,接受一个参数进程id可以通过process.pid 获取
process.kill(process.pid, 'SIGINT')
(7)process.env
用于读取操作系统所有的环境变量,也可以修改和查询环境变量
修改 注意修改并不会真正影响操作系统的变量,而是只在当前线程生效,线程结束便释放。