news 2026/6/9 23:07:54

Node.js 原生功能狂飙,15 个热门 npm 包要失业了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Node.js 原生功能狂飙,15 个热门 npm 包要失业了

大家好,我是 Immerse,一名独立开发者、内容创作者、AGI 实践者。

关注公众号:沉浸式趣谈,获取最新文章(更多内容只在公众号更新)

个人网站:https://yaolifeng.com 也同步更新。

转载请在文章开头注明出处和版权信息。

我会在这里分享关于编程独立开发AI干货开源个人思考等内容。

如果本文对您有所帮助,欢迎动动小手指一键三连(点赞评论转发),给我一些支持和鼓励,谢谢!


之前装个 Node.js 项目,npm 包能装一大堆。

现在发现很多包其实不用装了,Node.js 自己就支持。

这次整理了 15 个已经被 Node.js 原生功能替代的热门 npm 包。

有些已经稳定了,有些还在实验阶段,但都能用起来了。

fetch 终于成全局函数了

以前在 Node.js 里用 fetch,必须装 node-fetch。

现在 Node.js 18 开始,fetch 已经是全局函数了,和浏览器里的用法完全一样。

constres=awaitfetch("https://api.github.com/repos/nodejs/node");constdata=awaitres.json();console.log(data.full_name);

直接就能用,不用装任何包。

Node.js 17.5 开始实验性支持,到 18 就稳定了。

如果你的项目还在用 Node.js 18 之前的版本,那还是得装 node-fetch。

WebSocket 也原生支持了

之前做 WebSocket 客户端,基本都用 ws 这个包。

现在 Node.js 有了全局的 WebSocket 类。

constws=newWebSocket("wss://echo.websocket.org");ws.onopen=()=>ws.send("Hello!");ws.onmessage=(event)=>console.log("Received:",event.data);

Node.js 21 加的,不过还是实验性的。

要注意的是,这只是客户端支持。

如果要做 WebSocket 服务端,还是得用 ws 或者其他库。

测试框架不用装了

以前写测试,要装 mocha、jest 这些框架。

现在 Node.js 自带测试模块 node:test。

importtestfrom"node:test";importassertfrom"node:assert";test("addition works",()=>{assert.strictEqual(2+2,4);});

Node.js 18 加的实验性功能,到 20 就稳定了。

如果需要快照测试、mock 这些高级功能,第三方框架还是更强。

不过对于模块级别的测试,node:test 完全够用了。

SQLite 也要原生支持了

之前用 SQLite,要装 sqlite3 或 better-sqlite3。

这俩包都需要编译原生模块,升级 Node.js 版本经常出问题。

现在 Node.js 在开发 node:sqlite 模块。

import{open}from"node:sqlite";constdb=awaitopen(":memory:");awaitdb.exec("CREATE TABLE users (id INTEGER, name TEXT)");

不过还是实验性的,等稳定了就能彻底告别编译问题了。

控制台彩色输出不用装 chalk 了

给控制台输出加颜色,以前都用 chalk 或 kleur。

现在 Node.js 有 util.styleText 函数。

import{styleText}from"node:util";console.log(styleText("red","Error!"));console.log(styleText(["bold","green"],"Success!"));

Node.js 20.12 加的,到 22.17 就稳定了。

如果需要复杂的主题配置或链式调用,chalk 还是更好用。

但简单的颜色输出,原生的就够了。

清理 ANSI 码也不用装包了

以前要去掉日志里的 ANSI 转义码,得装 strip-ansi。

现在有 util.stripVTControlCharacters 函数。

import{stripVTControlCharacters}from"node:util";consttext="\u001B[4mUnderlined\u001B[0m";console.log(stripVTControlCharacters(text));

原生处理,稳定可靠。

基本不需要再装第三方包了。

glob 匹配文件也原生了

匹配文件路径,以前必须用 glob 包。

Node.js 22 开始有 fs.glob 函数了。

importfsfrom"node:fs/promises";constfiles=awaitfs.glob("**/*.js");console.log(files);

22 版本就稳定了,可以放心用。

老项目还在用旧版本 Node.js 的话,还是得继续用 glob 包。

递归删除目录不用 rimraf 了

删除整个目录树,以前都用 rimraf。

现在 fs.rm 直接支持递归删除。

importfsfrom"node:fs/promises";awaitfs.rm("dist",{recursive:true,force:true});

Node.js 12.10 就有了,现在所有 LTS 版本都稳定支持。

递归创建目录也不用 mkdir 了

创建多级目录,以前要装 mkdir。

现在 fs.mkdir 原生支持。

awaitfs.mkdir("logs/app",{recursive:true});

Node.js 10.12 就加了,早就稳定了。

UUID 生成不用装包了

生成 UUID v4,以前要装 uuid 包。

现在 crypto 模块自带 randomUUID 函数。

import{randomUUID}from"node:crypto";console.log(randomUUID());

Node.js 14.17 就有了,稳定版本。

Base64 编解码也原生支持了

以前要 polyfill atob 和 btoa 函数。

现在这俩已经是全局函数了。

constencoded=btoa("hello");console.log(encoded);console.log(atob(encoded));

Buffer 一直都有,现在加上 atob 和 btoa,浏览器和 Node.js 的代码终于统一了。

Node.js 20 左右加的,现在 LTS 版本都有。

URL 路由匹配有了 URLPattern

做路由匹配,以前要装 url-pattern。

现在有全局的 URLPattern API。

constpattern=newURLPattern({pathname:"/users/:id"});constmatch=pattern.exec("/users/42");console.log(match.pathname.groups.id);

Node.js 20 加的,不过还是实验性的。

但已经能用了,而且和浏览器的 URLPattern 完全一样。

加载 .env 文件不一定要 dotenv 了

之前加载环境变量文件,必须装 dotenv。

现在可以用 --env-file 参数。

node --env-file=.env app.js

Node.js 20.10 加的实验性功能。

如果需要变量展开或多文件支持,dotenv 还是更强。

但简单场景下,原生的就够了。

EventTarget 也是全局的了

以前 Node.js 只有 EventEmitter,要用 Web 标准的 EventTarget 得装 event-target-shim。

现在 EventTarget 已经是全局的了。

consttarget=newEventTarget();target.addEventListener("ping",()=>console.log("pong"));target.dispatchEvent(newEvent("ping"));

Node.js 15 加的,15.4 就稳定了。

浏览器和 Node.js 终于可以用同样的事件 API 了。

运行 TypeScript 不一定要 tsc 了

以前运行 .ts 文件,要装 TypeScript 编译器或 ts-node。

现在 Node.js 有实验性的 TypeScript 支持。

node --experimental-strip-types app.ts

Node.js 21 加的实验性功能。

不过这只是去掉类型标注,不做类型检查。

生产环境还是得用完整的 TypeScript 工具链。

为啥 Node.js 要把这些功能内置

看这些变化,能发现一个趋势。

以前需要外部依赖的功能,现在越来越多变成了核心功能。

这样做有几个好处。

减少依赖数量,项目更轻量。

降低供应链攻击风险,不用担心某个包被投毒。

代码在浏览器和服务端之间更容易移植。

能用就用起来

这些原生功能,浏览器支持好的就可以直接用了。

实验性的功能可以在开发环境先试试。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 18:05:22

LACP协议小结

一、核心定义:LACP 是什么?LACP 的全称是 Link Aggregation Control Protocol,即链路聚合控制协议。简单来说,LACP 是一个协议,它允许两台网络设备(如交换机与交换机、交换机与服务器)通过“对话…

作者头像 李华
网站建设 2026/6/9 19:40:46

存储器介绍(2)

一、核心概念定义与核心异同概念存储介质/硬件形态读写特性速度/延迟(FPGA场景)掉电易失性核心用途是否可编程(FPGA)片内RAMFPGA内部逻辑资源构成(SRAM)随机读写,无擦写次数限制最快&#xff08…

作者头像 李华
网站建设 2026/6/7 23:51:54

L298N如何提升智能小车运动精度?全面讲解

如何用L298N让智能小车跑得更稳更准?实战全解析你有没有遇到过这样的问题:明明代码写的是“直行两秒”,结果小车歪着走、越跑越偏?或者每次转弯的角度都不一样,根本没法做循迹?别急——这不一定是你的控制逻…

作者头像 李华
网站建设 2026/6/9 18:16:52

哪些领域或行业可能会因为 AI 技术的应用而迎来爆发性的增长?

结合政策导向、技术渗透率数据及实际落地成效,以下五大领域将在AI 赋能下实现爆发性增长,且均与企业管理场景深度绑定,为智能ERP 创造广阔应用空间:① 智能制造领域:AI 是智能制造核心驱动力!Gartner 预测制…

作者头像 李华