当前位置: 首页 > news >正文

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 要把这些功能内置

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

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

这样做有几个好处。

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

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

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

能用就用起来

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

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

http://www.cnnetsun.cn/news/191400.html

相关文章:

  • 赋能成长型企业:SAP Business One与奥维奥的数字化共赢之道
  • 一文说清同步整流buck电路图及其工作原理
  • Packet Tracer下载步骤详解:适合初学者的系统学习
  • 2025年AI论文写作平台精选,集成LaTeX支持与智能格式检查
  • Hotkey Detective终极指南:3步解决Windows热键冲突难题
  • 【Mol Plant综述精读】植物中的染色质重塑:复合物组成、机制多样性及生物学功能
  • 基于GA-HIDMSPSO算法优化BP神经网络+NSGAII多目标优化算法工艺参数优化、工程设计优化(四目标优化案例)
  • 系统学习erase前必须知道的存储基础知识
  • 通俗解释定制ROM在2025机顶盒刷机中的作用机制
  • 【数据分析】基于逆向方法的新型神经网络的实现,以估计云杉音木薄板的材料特性附Matlab代码
  • 微信小程序二维码生成实战指南:3步实现个性化营销码
  • 终极指南:如何使用Keyboard Chatter Blocker解决机械键盘连击问题
  • Performance-Fish性能优化指南:让《环世界》告别卡顿的5大秘诀
  • GKD订阅管理难题:如何用简单方法解决复杂问题
  • Windows热键失灵怎么办?这款侦探工具帮你快速定位问题
  • RePKG神器:Wallpaper Engine壁纸资源完美提取指南
  • 微信小程序二维码生成终极指南:weapp-qrcode快速上手与实战技巧
  • Calibre-Douban插件:电子书元数据智能管理完整指南
  • 3分钟掌握iOS设备终极玩法:解锁旧版系统降级与越狱全攻略
  • 终极SMU调试指南:突破Ryzen平台开发瓶颈
  • DeTikZify智能绘图:5分钟让手绘草图变身专业科研图表
  • BooruDatasetTagManager终极指南:快速掌握图像标签批量管理技巧
  • BooruDatasetTagManager图像标签管理工具:AI训练数据集的智能化解决方案
  • Calibre-Douban插件:轻松获取豆瓣图书元数据的完整指南
  • 终极指南:如何用Sunshine将任意设备变成游戏串流终端
  • Hotkey Detective:Windows快捷键冲突终极侦探手册
  • display driver uninstaller 清除 Intel 核显驱动的实操教程
  • DeTikZify完整指南:3步实现专业科研图表自动化生成
  • 2004-基于多目标粒子群(MOPSO)算法的多阈值图像分割(Renyi 熵 + 指数熵)(中文核心、SCI 四区可选)
  • Keyboard Chatter Blocker终极键盘防抖配置指南