目录
path模块
1. path.basename()
2. path.dirname
3. path.extname
4. path.join
5. path.resolve
6. path.parse path.format
OS模块
1. 获取操作系统的一些信息
(1)os.platform()
(2)os.release
(3)os.homedir()
(4) os.type()
(5)os.arch()
2. 获取CPU的线程以及详细信息
(1)os.cpus()
(2) os.cpus.length
3. 获取网络信息
process
api的介绍
(1)process.arch
(2)process.cwd
(3)process.argv
(4)process.memoryUsage
(5)process.exit
(6)process.kill
(7)process.env
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
用于读取操作系统所有的环境变量,也可以修改和查询环境变量
修改 注意修改并不会真正影响操作系统的变量,而是只在当前线程生效,线程结束便释放。