Node系列 · Node基础:基础内置模块
Node系列 · Node基础基础内置模块Node 内置的核心模块里os/path/url/util是几乎每个项目都会用的四件套。它们不依赖任何第三方包跨平台行为一致理解它们的真实行为能避免一类经典的在我电脑能跑问题。一、os与操作系统交互os模块提供操作系统层面的查询能力——CPU、内存、用户目录、网络接口等。常用 APIAPI返回类型用途os.EOLstring当前系统的行结束符\n/\r\nos.arch()stringCPU 架构arm64/x64os.cpus()array每颗逻辑 CPU 核心信息os.freemem()number空闲内存字节数os.totalmem()number总内存字节数os.homedir()string当前用户目录os.hostname()string主机名os.tmpdir()string系统临时目录os.platform()string平台标识darwin/linux/win32os.uptime()number系统启动到现在的秒数os.networkInterfaces()object网络接口列表典型应用// 根据 CPU 核心数决定要不要起 worker const cpuCount os.cpus().length; const workers Math.max(1, cpuCount - 1); // 把日志写到系统临时目录 const logDir path.join(os.tmpdir(), my-app-logs); fs.mkdirSync(logDir, { recursive: true });::: warning不要拿os.cpus().length当真实物理核心数。它返回的是逻辑核心数含超线程。Node 单进程只能用一个 CPU 核心物理多核需要 Worker Threads 或多进程。:::二、path跨平台路径处理path模块的核心价值是屏蔽 Windows / POSIX 路径差异。Node 代码里永远不要直接拼字符串路径全部走pathAPI。2.1 核心 APIAPI作用示例path.basename(p)取文件名path.basename(/a/b/c.txt)→c.txtpath.dirname(p)取目录path.dirname(/a/b/c.txt)→/a/bpath.extname(p)取后缀path.extname(/a/b/c.txt)→.txtpath.join(...p)拼接多段路径path.join(/a, b, c.txt)→/a/b/c.txtpath.resolve(...p)解析为绝对路径path.resolve(c.txt)→cwd/c.txtpath.relative(from, to)计算相对路径path.relative(/a/b, /a/c/d)→../c/dpath.isAbsolute(p)是否绝对路径path.isAbsolute(/a)→truepath.normalize(p)规范化路径path.normalize(/a//b/./c)→/a/b/cpath.sep当前系统的路径分隔符Linux\\(实际 /) / Windows\path.delimiter环境变量分隔符Linux:/ Windows;2.2joinvsresolve两个看着像行为差异很大// join纯拼接结果是不是绝对路径看输入 path.join(/a, b, c.txt); // /a/b/c.txt path.join(a, b, c.txt); // a/b/c.txt // resolve从右往左拼遇到绝对路径就重置起点 path.resolve(a, b, c.txt); // cwd/a/b/c.txt path.resolve(/a, b, /c.txt); // /c.txt遇到 /c.txt 重置2.3 跨平台注意事项// ❌ 错误直接拼字符串 const filePath __dirname /config/ filename; // ✅ 正确用 path.join const filePath path.join(__dirname, config, filename); // ❌ 错误硬编码分隔符 const tmpPath /tmp/ name; // ✅ 正确用 os.tmpdir() path.join const tmpPath path.join(os.tmpdir(), name);三、urlURL 解析与构造url模块提供 WHATWG URL 标准实现Node 10。3.1 核心 APIAPI用途new URL(input, base?)构造一个 URL 对象URLSearchParamsURL 查询字符串解析url.fileURLToPath(url)file://URL → 路径url.pathToFileURL(path)路径 →file://URL3.2 URL 对象const u new URL(https://user:passexample.com:8080/path/to?x1y2#hash); u.protocol; // https: u.host; // example.com:8080 u.hostname; // example.com u.port; // 8080 u.pathname; // /path/to u.search; // ?x1y2 u.hash; // #hash u.username; // user u.password; // pass u.origin; // https://example.com:80803.3 查询参数const u new URL(https://example.com/api?x1y2); // 读取 u.searchParams.get(x); // 1 u.searchParams.getAll(x); // [1] u.searchParams.has(z); // false // 增删改 u.searchParams.append(z, 3); u.searchParams.set(x, 10); u.searchParams.delete(y); // 序列化 u.toString(); // https://example.com/api?x10z3 // 单独构造 const params new URLSearchParams({ foo: 1, bar: 2 }); params.toString(); // foo1bar23.4 路径与 URL 互转import { fileURLToPath, pathToFileURL } from node:url; // path → file:// URL pathToFileURL(/usr/local/bin); // file:///usr/local/bin // file:// URL → path fileURLToPath(file:///usr/local/bin); // /usr/local/binESM 模块下import.meta.url是file://URL要拿路径必须fileURLToPath转一次CJS 下直接是__dirname。四、util工具函数集合util模块聚集了各种杂项但有用的工具。4.1 类型判断util.isArray([]); // true util.isDate(new Date()); // true util.isRegExp(/x/); // true util.types.isPromise(Promise.resolve()); // true util.types.isMap(new Map()); // true util.types.isSet(new Set()); // true util.types.isArrayBuffer(new ArrayBuffer(8)); // true::: tipNode 10 之后Array.isArray/instanceof已经够用util.isArray等被视为遗留 API。新代码建议用util.types或原生Array.isArray。:::4.2 回调与 Promise 互转// 旧的 CJS 回调风格 API(err, value) {...} // 想用 async/awaitutil.promisify 把它包成返回 Promise 的函数 const fs require(fs); const readFile util.promisify(fs.readFile); const data await readFile(./config.json, utf-8); // 反向Promise 风格 API 想给老代码用util.callbackify const asyncAdd async (a, b) a b; const cbAdd util.callbackify(asyncAdd); cbAdd(1, 2, (err, sum) { console.log(sum); // 3 });4.3 继承inherits// ES6 class 时代几乎不用——直接用 extends 即可 // 留给老代码理解 function Animal() {} Animal.prototype.greet function () { return hello; }; function Dog() {} util.inherits(Dog, Animal); Dog.prototype.bark function () { return woof; }; const d new Dog(); d.greet(); // hello d.bark(); // woof4.4 深度严格比较util.isDeepStrictEqual( { a: 1, b: [1, 2] }, { a: 1, b: [1, 2] } ); // true // 与 的关键区别递归比较对象、数组、Map、Set 1 1; // true { a: 1 } { a: 1 }; // false util.isDeepStrictEqual( { a: 1 }, { a: 1 } ); // true4.5 调试输出const obj { a: 1, b: { c: [1, 2, 3] } }; console.log(util.inspect(obj, { depth: 4, colors: true }));util.inspect是console.log内部实现可以指定深度、颜色、隐藏字段等。调试复杂对象时比直接JSON.stringify信息更全保留函数、undefined、循环引用。五、其他常用内置模块速览模块用途备注querystringURL 查询字符串URLSearchParams已覆盖大部分场景assert断言单元测试Node 自带测试时用jest 流行后少用eventsEventEmitter见第 12 章stream流处理见第 7 章crypto加密 / hash见后续章节zlib压缩 / 解压gzip / deflatechild_process子进程spawn / exec / fork六、最佳实践场景推荐做法反例拼接文件路径path.join/path.resolve字符串拼读用户目录os.homedir()假设是/home/x写临时文件os.tmpdir()path.join假设是/tmp解析 URLnew URL(...)searchParams手写 split老 API 转 Promiseutil.promisify自己手写 wrapper判断内置类型util.typesinstanceof跨 realm 不可靠多行字符串拼接path.join或os.EOL硬编码\n/\r\n七、小结os提供系统信息查询os.cpus().length是逻辑核心数含超线程path是跨平台路径处理的唯一正确选择join拼接、resolve解析为绝对路径url用 WHATWG 标准new URLsearchParams处理查询参数util.promisify把回调 API 包成 Promiseutil.callbackify反向这些模块零依赖——新项目能少装一个包就少装一个

相关新闻

路口红灯还剩几秒不用盯着看——鸿蒙版高德地图实况窗直接帮你读秒

路口红灯还剩几秒不用盯着看——鸿蒙版高德地图实况窗直接帮你读秒

等红灯时盯着灯看,想知道还剩几秒 开车到路口红灯亮了——你想知道还剩几秒变绿灯,要不要切换到别的频道等一会。传统做法要么盯着红绿灯数秒变灯,要么干脆不看预估个大概时间。盯灯浪费时间还容易分心,不看又不踏实,不…

2026/8/18 6:06:53 阅读更多 →
炒股盯盘、考试搜题、外卖抢单、随手记账——鸿蒙闪控球让4件事从3步变1步

炒股盯盘、考试搜题、外卖抢单、随手记账——鸿蒙闪控球让4件事从3步变1步

盯盘抢单搜题记账——这些高频操作每次都要跨好几个App 炒股盯盘要先打开券商App、找到对应股票、切换到实时行情页面;考试搜题要先切到搜题App、拍照或输入题目、等结果出来再看解析;外卖抢单要先打开外卖App、找到限时优惠、抢下后再付款;随…

2026/8/17 3:23:10 阅读更多 →
第 7 篇 Codex 实体门店自媒体获客

第 7 篇 Codex 实体门店自媒体获客

线下实体 / 同城商家获客体系━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━分工原则转化链路:同城流量 → 内容种草 → 到店(POI/团购) → 加微信 → 复购转介绍。Codex 包办 80% 案头活(词库…

2026/8/18 4:02:08 阅读更多 →

最新新闻

DeepSeek API价格调整应对:成本控制与本地部署实战指南

DeepSeek API价格调整应对:成本控制与本地部署实战指南

最近在开发者圈子里,一个话题的热度正在悄然攀升:DeepSeek Harness 的发布,以及随之而来的 API 价格调整。如果你正在使用或考虑使用 DeepSeek 的模型服务,无论是通过 API 调用,还是计划本地部署,那么这篇文…

2026/8/18 6:43:14 阅读更多 →
Android玩机进阶:Magisk隐藏Root与LSPosed框架实战指南

Android玩机进阶:Magisk隐藏Root与LSPosed框架实战指南

1. 从解锁到掌控:Android玩机的核心价值与风险边界拿到一部Android手机,第一件事是什么?对于绝大多数普通用户,可能是下载几个常用App。但对于我们这些喜欢折腾、追求极致掌控感的玩家来说,答案只有一个:获…

2026/8/18 6:43:14 阅读更多 →
从二分到三分:单峰函数极值搜索算法原理与C++实现

从二分到三分:单峰函数极值搜索算法原理与C++实现

1. 从二分到三分:算法思想的一次自然延伸在算法学习的路上,二分查找(Binary Search)几乎是所有人的第一道坎,也是理解“分治”与“减治”思想的绝佳起点。它的核心逻辑清晰得近乎优雅:在一个单调有序的序列…

2026/8/18 6:43:14 阅读更多 →
可执行世界模型与验证:解决ARC-AGI-3智能体编程最后一公里的核心技术

可执行世界模型与验证:解决ARC-AGI-3智能体编程最后一公里的核心技术

1. 项目概述:从ARC-AGI-3看智能体编程的“最后一公里”最近在AI编程领域,一个名为“ARC-AGI-3”的基准测试正在引发越来越多的讨论。这个测试的核心,是要求一个AI智能体(Coding Agent)仅仅通过观察几个输入-输出对的例…

2026/8/18 6:43:14 阅读更多 →
番茄工作法深度解析:从认知原理到实战应用,提升专注力与工作效率

番茄工作法深度解析:从认知原理到实战应用,提升专注力与工作效率

1. 从“番茄”到“专注”:一个被误解的效率工具 如果你在效率工具圈里待过一阵子,大概率听说过“番茄工作法”。这个名字听起来有点可爱,甚至带点“玩具”属性的方法,却是我过去几年里,在应对高强度、高密度工作任务时…

2026/8/18 6:43:14 阅读更多 →
浏览器插件开发实战:DOM操作与API集成实现网页头像批量替换

浏览器插件开发实战:DOM操作与API集成实现网页头像批量替换

1. 这篇文章真正要解决的问题 你是否曾想过,如果能把一个网站的用户头像,批量、自动地替换成你喜欢的风格,会是怎样一种体验?比如,把B站(Bilibili)评论区里所有的用户头像,都变成可…

2026/8/18 6:42:14 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/17 2:58:27 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/17 2:58:30 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/17 2:58:32 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →