Node 学习二、全局变量 process 和 核心模块 path

2024-08-23 01:18

本文主要是介绍Node 学习二、全局变量 process 和 核心模块 path,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

全局变量 process

获取进程信息

// 1 资源// 1.1 内存// 占用 arrayBuffers
// 声明一个大小为 1000 的 Buffer
// Buffer.alloc(1000)console.log(process.memoryUsage())
// {
//   rss: 24879104, // 常驻内存
//   heapTotal: 4509696, // 脚本执行之初申请的总的内存大小
//   heapUsed: 2415608, // 当前脚本在执行中实际使用的内存大小
//   external: 808874, // 底层 C/C++ 模块所占据的内存大小
//   arrayBuffers: 9386 // 缓冲区,代表一块独立的空间,不占据 V8 的内存,默认也会先申请一块空间
// }// 1.2 CPUconsole.log(process.cpuUsage())
// {
//   user: 31000, // 用户占用的 CPU 时间片段
//   system: 78000 // 操作系统占用的 CPU 时间片段
// }
// 2 运行环境// 2.1 运行目录
console.log(process.cwd())// 2.2 node 环境信息
console.log(process.version) // node 版本
console.log(process.versions) // 更多版本信息// 2.3 cpu 架构
console.log(process.arch) // x64// 2.4 用户环境(开发环境)
console.log(process.env.NODE_ENV)
console.log(process.env.PATH)// 2.5 系统平台
console.log(process.platform) // win32
// 3 运行状态// 3.1 启动参数(如 node <脚本文件> 1 -a 2 -b)
console.log(process.argv) // [<node 启动程序绝对路径>, <脚本文件绝对路径>, '1', '-a', '2', '-b']// 3.2 进程 PID
console.log(process.pid)// 3.3 运行时间
setTimeout(() => {console.log(process.uptime()) // 脚本从运行开始到结束总共消耗的时间
}, 3000)

执行进程操作

// 1 事件监听// 注册一个退出事件
// 退出事件在当前脚本文件执行完成之后触发
// code 是退出时的状态码
process.on('exit', code => {console.log('exit ' + code)setTimeout(() => {console.log('exit 事件不支持异步代码')}, 1000)
})process.on('beforeExit', code => {console.log('before exit ' + code)// beforeExit 事件中执行异步代码会让将要退出的脚本继续执行// 结果会导致 beforeExit 触发死循环
})console.log('脚本执行结束')// 主动退出不会触发 beforeExit
// process.exit()// 脚本执行结束
// exit 0
// before exit 0

下面简单了解一下管道、流:

// 2 标准输出console.log = data => {// stdout 标准输出// stdout 返回一个流对象process.stdout.write('---' + data + '\n')
}console.log(11)
console.log(22)const fs = require('fs')// 创建一个可读流 读取 test.txt 的内容
fs.createReadStream('test.txt')// 通过一个管道将数据流向(传递)下一个处理者// 传递给标准输出,就会打印到控制台.pipe(process.stdout)
// 3 标准输入// stdin 同样返回一个流
process.stdin// 允许在控制台输入内容// 将控制台输入的内容流向 stdout 输出// 类似复印的效果.pipe(process.stdout)
// 3 标准输入// 设置标准输入的字符编码集
process.stdin.setEncoding('utf-8')// 监听 readable 事件
// 当有可从流中读取的数据时,会触发 readable 事件
// 数据会被读入内部缓冲区
process.stdin.on('readable', () => {// 从内部缓冲区取出一些数据并返回let chunk = process.stdin.read()if (chunk) {process.stdout.write('data ' + chunk)}
})

内置模块之 path

Node 内置的模块需要通过 require 导入当前的脚本中使用。

path 模块的主要作用是用于处理文件或目录的路径。

常用 API

  • basename():获取路径中基础名称
  • dirname():获取路径中目录路径
  • extname():获取路径中扩展名称
  • isAbsolute():判断路径是否为绝对路径
  • join():拼接多个路径片段
  • resolve():返回绝对路径
  • parse():解析路径
  • format():序列化路径,与 parse() 相反
  • normalize():规范化路径
const path = require('path')/** 1 获取路径中的基础名称* 01 返回的是接收路径当中的最后一部分,忽略前后的路径分隔符* 02 第二个可选参数表示扩展名,如果没有设置则返回完整带后缀的文件名称* 03 第二个参数也可以看作从后截取的字符串* 04 第二个参数会匹配当前路径的基础名称,如果匹配失败则忽略*/console.log(path.basename('D:/a/b/c/demo.js')) // demo.js
console.log(path.basename('D:/a/b/c/demo.js', '.js')) // demo
console.log(path.basename('D:/a/b/c/demo.js', '.css')) // demo.js
console.log(path.basename('/a/b/c')) // c
console.log(path.basename('/a/b/c/')) // c/** 2 获取路径中的目录路径* 01 返回路径中最后一个部分的上一层目录所在路径,忽略前后的路径分隔符**/
console.log(path.dirname('D:/a/b/c/demo.js')) // D:/a/b/c
console.log(path.dirname('/a/b/c')) // /a/b
console.log(path.dirname('/a/b/c/')) // /a/b/** 3 获取路径中的扩展名* 返回文件路径的文件的扩展名* 实际上匹配的是路径中最后一部分从最后一次出现`.`字符到结尾的部分,保留 `.`*/
console.log(path.extname('D:/a/b/c/demo.js')) // .js
console.log(path.extname('/a/b/c.d.e.css')) // .css
console.log(path.extname('/a/b/c.')) // .
console.log(path.extname('/a/b/c')) // 空/** 4 解析路径* 01 接收一个路径,返回一个包含路径信息的对象*/
console.log(path.parse('/a/b/c/demo.js'))
// {
//   root: '/', // 根路径
//   dir: '/a/b/c', // 同 dirname
//   base: 'demo.js', // 同 basename 完整名称
//   ext: '.js', // 同 extname
//   name: 'demo' // 最后一部分的文件名
// }
console.log(path.parse('/a/b/c'))
console.log(path.parse('/a/b/c/'))
console.log(path.parse('a/b/c'))/** 5 序列化路径* 与 parse() 相反*/
console.log(path.format(path.parse('a/b/c')))/* 6 判断路径是否为绝对路径 */
console.log(path.isAbsolute('foo')) // false
console.log(path.isAbsolute('/foo')) // true
console.log(path.isAbsolute('///foo')) // true/** 7 拼接路径* 01 使用当前平台的分隔符作为界定符拼接给定的路径片段* 02 空字符串会被作为 `.` 拼接*/
console.log(path.join('a/b', 'c', 'demo.js')) // a\b\c\demo.js
console.log(path.join('a/b', 'c', '../', 'demo.js')) // a\b\demo.js
console.log(path.join('a/b', 'c', '/demo.js')) // a\b\c\demo.js
console.log(path.join('a ', ' ', 'demo.js')) // a \ \demo.js/** 8 规范化路径* 01 将路径分隔符替换为当前平台的分隔符 `/` 或 `\`* 02 将连续的分隔符替换为1个* 03 保留尾随的分隔副* 04 空字符串路径会被转化成 `.`*/
console.log(path.normalize('')) // .
console.log(path.normalize('a///b/c../d')) // a\b\c..\d
console.log(path.normalize('a//\\/b/c\\/d/')) // a\b\c\d\/** 9 返回绝对路径* 将路径或路径片段的序列解析为绝对路径* 给定的路径序列从右往左处理,每个后续的路径都会被追加到前面,直到构建绝对路径* 如果处理完所有给定的路径还没有生成绝对路径,则使用当前工作目录`__dirname`*/
console.log(path.resolve()) // 同 __dirname
console.log(path.resolve('a', 'b')) // <__dirname>/a/b
console.log(path.resolve('a', '/b')) // <盘符>:/b
console.log(path.resolve('/a', '/b')) // <盘符>:/a
console.log(path.resolve('a', 'b', '../c')) // <__dirname>/a/c

这篇关于Node 学习二、全局变量 process 和 核心模块 path的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097943

相关文章

python中os.stat().st_size、os.path.getsize()获取文件大小

《python中os.stat().st_size、os.path.getsize()获取文件大小》本文介绍了使用os.stat()和os.path.getsize()函数获取文件大小,文中通过示例代... 目录一、os.stat().st_size二、os.path.getsize()三、函数封装一、os

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Python模块导入的几种方法实现

《Python模块导入的几种方法实现》本文主要介绍了Python模块导入的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录一、什么是模块?二、模块导入的基本方法1. 使用import整个模块2.使用from ... i

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06