96SEO 2026-04-20 16:50 1
大家好,我是 Immerse。不知道你们有没有这种感觉,每次打开一个新的项目,kan着 package.json 里密密麻麻的依赖,心里总有点发毛?尤其是那些动辄几百兆的 node_modules,不仅占硬盘,还像是一颗颗定时炸弹,指不定哪天某个底层包就被撤库了或者geng惨,被投毒了。

说实话,以前为了实现一些基础功Neng,我们不得不依赖第三方库。那时候的 Node.js 生态虽然繁荣,但也显得有些支离破碎。但Zui近这两年,风向变了。Node.js 官方团队似乎听到了开发者的呐喊,开始疯狂“内卷”,把那些我们离不开的常用功Neng,一个个dou塞进了核心库里。
今天我想和大家聊聊这个趋势。这不仅仅是版本号的geng迭,这是一场关于“依赖瘦身”的革命。我们整理了 15 个曾经风光无限,如今却可Neng要面临“失业”危机的热门 npm 包。kankan你的项目里是不是还躺着它们?
一、 网络请求与连接:终于统一了前端和后端的割裂,曾经让我们hen痛苦。浏览器里有的 API,Node.js 里没有;Node.js 里有的,浏览器又不认。这种不一致性,增加了巨大的认知负担。但现在这道墙正在被推倒。
1. 告别node-fetch,拥抱全局 Fetch
以前在 Node.js 里发 HTTP 请求,node-fetch 几乎是标配。虽然它hen好用,但每次dou要装一个包,总觉得怪怪的。毕竟浏览器原生就支持,为什么服务端不行?
现在从 Node.js 18 开始,fetch Yi经是全局函数了。这意味着什么?意味着你Ke以直接复制浏览器里的代码到 Node.js 里跑,用法完全一样,不需要任何引入。
const res = await fetch;
const data = await res.json;
console.log;
直接就Neng用,这种感觉真的太爽了。Ru果你的项目还在用旧版本的 Node.js,那可Neng还得继续用 node-fetch,但只要升级一下就Neng立刻减负。
以前Zuo WebSocket 客户端,基本大家dou会下意识地去装 ws 这个包。它确实强大,生态也成熟。但是对于简单的客户端连接需求,现在 Node.js Yi经有了全局的 WebSocket 类。
const ws = new WebSocket;
ws.onopen = => ws.send;
ws.onmessage = => console.log;
虽然目前这还是实验性的功Neng,但Yi经Neng用了。要注意的是这只是客户端支持。Ru果你需要Zuo复杂的 WebSocket 服务端,或者需要处理高并发、特殊协议,那 ws 或者其他成熟的库依然是首选。但简单的场景?原生的就够了。
EventTarget 不再需要 Shim
以前 Node.js 只有 EventEmitter,这玩意儿虽然好用,但它是 Node 特有的。Ru果你想用 Web 标准的 EventTarget,就得装 event-target-shim 来Zuo兼容。
现在好了EventTarget Yi经是全局的了。浏览器和 Node.js 终于Ke以用同样的事件 API 了。
const target = new EventTarget;
target.addEventListener => console.log);
target.dispatchEvent);
代码在浏览器和服务端之间geng容易移植,这对于写同构应用的朋友来说绝对是个福音。
二、 文件系统与路径处理:那些繁琐的 Polyfill操作文件系统是后端开发的日常。以前为了跨平台兼容或者为了偷懒,我们引入了不少工具。现在回头kan,hen多其实没必要。
4.rimraf Ke以退休了吗?
删除整个目录树,这在 Windows 上曾经是个噩梦,因为有些文件被锁或者路径太长。所以 rimraf 成了标配,它就像 Linux 里的 rm -rf 一样强力。
现在fs.rm 直接支持递归删除,而且早就稳定了。
import fs from "node:fs/promises";
await fs.rm;
原生处理,稳定可靠,少装一个包,少一份风险。
5.mkdirp / mkdir 的原生替代
创建多级目录,以前要装 mkdirp 或者 mkdir 包。现在 fs.mkdir 原生就支持 recursive: true 选项了。
await fs.mkdir;
这个功Neng其实 Node.js hen早就加了早就稳定了。Ru果你还在代码里引入这些包,真的Ke以删掉了。
6.glob 的原生化尝试
匹配文件路径,以前必须用 glob 包或者 fast-glob。这几乎是构建工具和脚手架的必选项。不过Node.js 20 左右开始有了 fs.glob 函数了。
import fs from "node:fs/promises";
const files = await fs.glob;
console.log;
虽然目前还是实验性的,但这个趋势hen明显:Node.js 想把文件匹配这种基础Neng力收归自有。老项目Ru果还在用旧版本 Node.js,那还是得继续用 glob 包,但新项目不妨试试原生的。
三、 开发体验与工具链:效率的提升这一块的变化Zui让我感到兴奋。因为直接影响了我们写代码的幸福感。
7. 测试框架mocha / jest 的挑战者
以前写测试,要装 mochajest 这些框架。它们hen重,配置也多。现在 Node.js 自带测试模块 node:test。
import test from "node:test";
import assert from "node:assert";
test => {
assert.strictEqual;
});
对于模块级别的测试,node:test 完全够用了。它内置了 Mock、Spy 等功Neng,而且不需要复杂的配置。当然Ru果你需要快照测试、复杂的报告生成或者特定的断言库,第三方框架还是geng强。但对于简单的单元测试,原生的真的香。
dotenv
之前加载环境变量文件,必须装 dotenv。这几乎是每个 Node.js 项目的第一个依赖。现在你Ke以直接用启动参数 --env-file。
node --env-file=.env app.js
这个功Neng是 Node.js 20.6.0 加的实验性功Neng,现在 LTS 版本dou有。虽然 dotenv 支持变量展开、多文件支持等高级特性,但Ru果你只是简单读取 .env,那原生参数完全够用,连代码dou不用改。
以前运行 .ts 文件,要装 TypeScript 编译器或者 ts-node。这俩包dou需要编译原生模块,升级 Node.js 版本经常出问题,编译速度也慢。
现在 Node.js 有实验性的 TypeScript 支持,Ke以直接运行 TS 文件:
node --experimental-strip-types app.ts
不过这只是去掉类型标注,不Zuo类型检查。生产环境还是得用完整的 TypeScript 工具链。但在写脚本或者快速验证想法时这个功Neng简直是救命稻草。等它稳定了就Neng彻底告别编译问题了。
四、 数据处理与格式化:细节决定成败除了大块头的功Neng,hen多细节上的打磨也体现了 Node.js 的进步。
10. UUID 生成uuid
生成 UUID v4,以前要装 uuid 包。虽然它hen小,但也是依赖。现在 crypto 模块自带 randomUUID 函数。
import { randomUUID } from "node:crypto";
console.log);
Node.js 15.6.0 就有了稳定版本。基本不需要再装第三方包了。
11. 控制台颜色chalk / kleur
给控制台输出加颜色,以前dou用 chalk 或 kleur。它们确实好用,API 设计得hen优雅。现在 Node.js 有了 util.styleText 函数。
import { styleText } from "node:util";
console.log);
console.log);
Ru果需要复杂的主题配置或链式调用,chalk 还是geng好用。但简单的颜色输出,原生的就够了少个依赖是个依赖。
atob / btoa
Buffer 一直dou有,但以前要 polyfill atob 和 btoa 函数才Neng和浏览器保持一致。现在这俩Yi经是全局函数了。
const encoded = btoa;
console.log;
console.log);
Buffer 一直dou有,现在加上 atob 和 btoa,浏览器和 Node.js 的代码终于统一了。
13. 去除 ANSI 转义码strip-ansi
以前要去掉日志里的 ANSI 转义码,得装 strip-ansi。现在有 util.stripVTControlCharacters 函数。
import { stripVTControlCharacters } from "node:util";
const text = "\u001B[4mUnderlined\u001B[0m";
console.log);
14. 路由匹配 url-pattern
Zuo路由匹配,以前要装 url-pattern 或者 path-to-regexp。现在有全局的 URLPattern API,而且和浏览器的 URLPattern 完全一样。
const pattern = new URLPattern;
const match = pattern.exec;
console.log;
15. 数据库支持 sqlite3 的未来
这个稍微有点远,但值得提一下。之前用 SQLite,要装 sqlite3 或 better-sqlite3。这俩包dou需要编译原生模块,升级 Node.js 版本经常出问题。
现在 Node.js 在开发 node:sqlite 模块。
import { open } from "node:sqlite";
const db = await open;
await db.exec");
目前还是实验性的,等稳定了就Neng彻底告别编译问题了。
五、 :趋势与思考kan这些变化,Neng发现一个明显的趋势。以前需要外部依赖的功Neng,现在越来越多变成了核心功Neng。
这样Zuo有几个显而易见的好处:
减少依赖数量,项目geng轻量。 node_modules 变小了安装速度变快了。
降低供应链攻击风险。 不用担心某个冷门包被投毒,核心库的维护总是geng受重视。
提升跨平台兼容性。 浏览器和 Node.js 的 API 越来越像,代码复用率geng高。
当然第三方库不会消失。它们依然提供了比原生 API geng高级的抽象、geng完善的错误处理和geng丰富的功Neng。比如 chalk 的链式调用、dotenv 的变量展开,这些dou是原生 API 暂时还比不上的。
但是对于hen多中小型项目,或者简单的工具脚本来说原生功NengYi经完全够用了。我们真的需要为了一个 UUID 去引入一个包吗?或者为了删个文件夹去引入一个包?
这不仅仅是技术选型的问题,geng是一种开发哲学的转变:够用就好。实验性的功NengKe以在开发环境先试试,有些Yi经稳定了有些还在实验阶段,但douNeng用起来了。
我会在这里分享关于编程独立开发AI干货开源个人思考等内容。Ru果你觉得这篇文章对你有帮助,欢迎动动小手指一键三连,给我一些支持和鼓励,谢谢!
个人网站:yaolifeng.com 也同步geng新。关注公众号:沉浸式趣谈,获取Zui新文章。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback