学习node.js 二 path模块,os模块,process

目录

path模块

[1. path.basename()](#1. path.basename())

[2. path.dirname](#2. path.dirname)

[3. path.extname](#3. path.extname)

[4. path.join](#4. path.join)

[5. path.resolve](#5. path.resolve)

[6. path.parse path.format](#6. path.parse path.format)

OS模块

[1. 获取操作系统的一些信息](#1. 获取操作系统的一些信息)

(1)os.platform()

(2)os.releaseos.release)

(3)os.homedir()

(4) os.type() os.type())

(5)os.arch()

[2. 获取CPU的线程以及详细信息](#2. 获取CPU的线程以及详细信息)

(1)os.cpus()

(2) os.cpus.length os.cpus.length)

[3. 获取网络信息](#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命令

javascript 复制代码
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()
javascript 复制代码
{
    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()

javascript 复制代码
{
  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(外部内存使用量)等

javascript 复制代码
{
    rss: 30932992, // 常驻集大小 这是进程当前占用的物理内存量,不包括共享内存和页面缓存。它反映了进程实际占用的物理内存大小
    heapTotal: 6438912, //堆区总大小 这是 V8 引擎为 JavaScript 对象分配的内存量。它包括了已用和未用的堆内存
    heapUsed: 5678624,  //已用堆大小
    external: 423221, //外部内存使用量 这部分内存不是由 Node.js 进程直接分配的,而是由其他 C/C++ 对象或系统分配的
    arrayBuffers: 17606 //是用于处理二进制数据的对象类型,它使用了 JavaScript 中的 ArrayBuffer 接口。这个属性显示了当前进程中 ArrayBuffers 的数量
  }
(5)process.exit

将强制进程尽快退出,即使仍有未完全完成的异步操作挂起

例:

javascript 复制代码
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

用于读取操作系统所有的环境变量,也可以修改和查询环境变量

修改 注意修改并不会真正影响操作系统的变量,而是只在当前线程生效,线程结束便释放。

相关推荐
也无晴也无风雨1 小时前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
Martin -Tang1 小时前
Vue 3 中,ref 和 reactive的区别
前端·javascript·vue.js
懒惰的bit2 小时前
基础网络安全知识
学习·web安全·1024程序员节
FakeOccupational3 小时前
nodejs 020: React语法规则 props和state
前端·javascript·react.js
放逐者-保持本心,方可放逐3 小时前
react 组件应用
开发语言·前端·javascript·react.js·前端框架
曹天骄4 小时前
next中服务端组件共享接口数据
前端·javascript·react.js
阮少年、4 小时前
java后台生成模拟聊天截图并返回给前端
java·开发语言·前端
Natural_yz4 小时前
大数据学习09之Hive基础
大数据·hive·学习
龙中舞王4 小时前
Unity学习笔记(2):场景绘制
笔记·学习·unity
Natural_yz5 小时前
大数据学习10之Hive高级
大数据·hive·学习