惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Schneier on Security
N
News and Events Feed by Topic
量子位
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
Hugging Face - Blog
Hugging Face - Blog
S
Security Affairs
J
Java Code Geeks
Schneier on Security
Schneier on Security
Google Online Security Blog
Google Online Security Blog
TaoSecurity Blog
TaoSecurity Blog
小众软件
小众软件
S
SegmentFault 最新的问题
www.infosecurity-magazine.com
www.infosecurity-magazine.com
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Security Archives - TechRepublic
Security Archives - TechRepublic
P
Privacy International News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
博客园 - 聂微东
T
Tor Project blog
博客园 - Franky
C
CERT Recently Published Vulnerability Notes
Cyberwarzone
Cyberwarzone
罗磊的独立博客
博客园_首页
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
大猫的无限游戏
大猫的无限游戏
Forbes - Security
Forbes - Security
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
腾讯CDC
Simon Willison's Weblog
Simon Willison's Weblog
S
Securelist
博客园 - 【当耐特】
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
博客园 - 司徒正美
AWS News Blog
AWS News Blog
WordPress大学
WordPress大学
Jina AI
Jina AI
G
GRAHAM CLULEY
V
V2EX
L
LINUX DO - 最新话题
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家

博客园 - 一名程序媛呀

Anki插件开发必知必会:钩子函数与右键菜单定制 httpx 传参总报错?这次把 GET、POST、文件上传到响应处理的坑给你一次填平 从卡顿到丝滑:FastAPI 调用外部 API 的正确姿势(httpx 实战) 还在 XHR、Fetch 和 Axios 之间纠结?我踩过的坑,希望你一个都不用碰到 你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南 Uvicorn、Gunicorn 傻傻分不清?FastAPI 生产部署避坑指南 Termux里的二进制和脚本,到底怎么运行才不踩坑?Termux-service 保活妙招! 刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API 别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了 掏出手机就能搭个 WebDAV 同步服务器?这操作有点香 别只盯着GitBook了!这个文档神器让你的笔记秒变网站 写爬虫时用了代理还被封?Python 代理的那些隐藏坑,我替你踩明白了 FastAPI 身份验证总踩坑?这份 FastAPI Users “避坑指南”请收好 旧手机别扔!用 Termux 搭个私人云盘,比网盘香多了 你的FastAPI又在服务器上“跑不起来”了?来,今天咱把打包这件事彻底聊透 写页面时别再把 Element Plus 整个搬进来啦!Vue3按需加载的坑我帮你踩平了 聊聊 fetch 使用中我踩过的那些坑和正确打开方式 FastApiAdmin 后端接口开发好了,前端管理界面怎么调用与显示? 给 FastApiAdmin 加个“会议纪要”模块,我把后端二次开发的坑踩了个遍 我用了FastApiAdmin后,连夜把踩过的坑都整理出来了 告别 Typora 后的新欢:我把所有笔记迁移到了 Obsidian 这个“第二大脑” 你的Agent API还在裸奔?从认证到沙箱,我用FastAPI搭了几道防线 让 FastAPI Agent 思考不阻塞:手把手教你实现异步任务与后台处理方案 让FastAPI Agent真正记住你:聊聊会话记忆与持久化存储的落地实践 FastAPI Agent 函数调用实战:我让 AI 学会了“自己动手查天气“ 初探:用 FastAPI 搭建你的第一个 AI Agent 接口 FastAPI 少有人提的实用技巧:把 Depends 依赖提到路由层,代码少写60% FastAPI 生产环境静态文件完全指南:从 /favicon.ico 404 到 HSTS 混合内容,一次全根治 用了loguru我才明白,Python日志还能这么写 FastAPI 后台任务:BackgroundTasks 的使用场景与注意事项 FastAPI配置管理避坑指南:从硬编码到 .env 与 pydantic_settings 类,连路由用法都给你捋清楚 FastAPI 文件上传避坑全指南:分块存盘、类型校验与安全兜底 FastAPI + Pydantic 模型终极实战手册:从能跑就行到固若金汤,这些技巧你一定用得上 FastAPI + SQLAlchemy 2.0 通用CRUD操作手册 —— 从同步到异步,一次讲透 FastAPI订单防超卖实战:从数据库锁到Saga分布式事务,这一篇给你理清了 FastAPI 生产环境避坑指南:用 Alembic 管理数据库迁移,别再手动改表结构了! FastAPI服务半夜又挂了?先别急着重启,查查你的数据库连接池“池子”是不是漏了 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 Vue 3 组合式 API 香是香,但从Vue2迁移时你可别像我当初一样踩进这 3 个深坑里 我用fastapi-scaff搭了个项目,两天工期缩到两小时,老板以为我开挂了 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! FastAPI自动生成的API文档太丑?我花了一晚上把它改成了客户愿意付费的样子 告别手写 API 胶水代码:FastAPI 与 Vue 的“契约自动机” OpenAPI 实战 FastAPI + Vue 前后端分离实战:我的项目结构“避坑指南” FastAPI + Celery 实战:异步任务里调用 Redis 和数据库的全解析,及生产级组织方案 FastAPI里玩转Redis和数据库的正确姿势,别让异步任务把你坑哭了! FastAPI + Celery 实战:异步任务的坑与解法,我帮你踩了一遍 FastAPI子应用挂载:别再让root_path坑你一夜 FastAPI项目半夜报警吵醒你?聊聊告警这事儿怎么搞! 别再数据线了!用FastAPI 5分钟搭个局域网文件+剪贴板神器 FastAPI单元测试实战:别等上线被喷才后悔,TestClient用对了真香! FastAPI状态共享秘籍:别再让中间件、依赖和路由“各自为政”了! FastAPI实战:WebSocket vs Socket.IO,这回真给我整明白了! 从0到1,FastAPI + PostgreSQL + Tortoise ORM 实战避坑指南 FastAPI + PostgreSQL 实战:给应用装上“缓存”和“日志”翅膀 FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透
前端包管理咋选?我从npm叛逃到pnpm的血泪史(附避坑指南)
一名程序媛呀 · 2026-05-27 · via 博客园 - 一名程序媛呀

你是不是也烦透了 npm install 时漫长的等待,每次都得去接杯咖啡,回来一看进度条还没过半?

更离谱的是,项目明明只引用了 express,结果代码里却能直接 require lodash ,还跑得欢——这就是臭名昭著的“幽灵依赖”

node_modules 里迷路无数次又爬出来后,今天咱们就来掏心窝子聊聊,为啥我最终全面倒向了 pnpm

🎯 选型纠结症:npm、yarn、pnpm 到底该爱谁

好,咱们先来看这“三兄弟”。

npm 就像原配,Node.js 自带的,不用额外装,但早期版本那扁平的 node_modules 简直是灾难,依赖层级深了 Windows 上都能因为路径过长删不掉文件。

yarn 刚出来时主打快速和离线缓存,算是踹了 npm 一脚让它进步,但经典 v1 的幽灵依赖问题依旧在。

pnpm 呢?它像个极客,用硬链接和符号链接把依赖物理上全局存一份,各个项目里只是链接过去。

这里要注意下:看公司老项目用 npm,新项目就无脑跟,结果一个 monorepo 里混用 npm 和 pnpm,lock 文件打架,CI/CD 各种诡异报错,那可有够排查的了。

要我说,新项目一律 pnpm,老项目也值得花半小时迁移,长痛不如短痛。

🚀 安装与起步:30 秒用起来

pnpm 安装简单到不像话,Node.js 版本 16 以上 直接通过自带的 corepack 启用就行,省得全局污染。打开终端跑一句:

corepack enable
corepack prepare pnpm@latest --activate

这里要注意——想着反正有 npm,就在项目里用 npm install -g pnpm 装全局,结果换 Node 版本时经常丢,还得重装。corepack 跟着 Node 走,稳多了。

装完后敲个 pnpm -v 看到版本号就完事。

想快速搞个新项目试试?三步走:

👉 pnpm init 初始化,和 npm init 一样友好

👉 pnpm add vite 装个 Vite,感受飞一般链接速度

👉 pnpm run dev 跑起来,齐活

要是老项目迁移,记住先把 node_modules 和老的 lock 文件删干净,再 pnpm install 生成新锁,别混用,不然包管理器打架能让你 debug 到怀疑人生。

一句话总结:安装别用全局 npm 装,corepack 走起;新项目直接 init/add/run,老项目记得清缓存再迁移。就这么简单,别把它想复杂了。

⚡️ 常用命令速查:三分钟上手干活

其实 pnpm 的命令和 npm 八九不离十,但有些细节特贴心。安装依赖一个

pnpm install

完事。装个 lodash:

pnpm add lodash

卸载就是:

pnpm remove lodash

那如果你要在根目录装个 TypeScript,得加 -w 标志才能往 workspace 根目录写,否则它会傲娇地拒绝你。

全局安装直接 pnpm add -g pnpm 升级自己,舒服。

使用前配置全局镜像源加速还是要做的:

pnpm config set registry https://registry.npmmirror.com

再说个容易翻车的点:pnpm 默认不会提升依赖到顶层,代码里只能用你 package.json 里声明过的库。

要是你以前写惯了 “偷偷引用” 的幽灵模块,迁移过来绝对报 Cannot find module 。这才是它真正的安全之处,值得你改掉那个坏习惯。

🛠 从 npm 迁移的血泪避坑实录

第一步删掉老旧的 package-lock.json 和 node_modules,别手软:

rm -rf node_modules package-lock.json

然后直接 pnpm install 生成属于它的 lock 文件。

接着重点来了:老项目里随处可见的 require('some-deep-dep') 现在肯定罢工。我的笨办法是逐个给补上 pnpm add some-deep-dep ,虽然有点烦,但结构干净多了。

你可能会问:那 Webpack 或 Vite 里 resolve 的 alias 会不会挂?如果以前乱指向 node_modules 里的特定位置,九成会挂。建议检查配置里的 require.resolve 路径,最好改成用 package 名称引用,让打包器自己找。

是不是以为这样就完了?还没!CI/CD 里务必把 pnpm 版本锁死。

比如在 Dockerfile 里用 corepack prepare pnpm@11.2.2 --activate ,否则某天云端给你升了个不兼容的大版本,够你喝一壶的。

🧠 进阶思考:monorepo 原生气质

最后啰嗦一句,pnpm 自带的 workspace 功能对 monorepo 管理真的如丝般顺滑。

根目录建个 pnpm-workspace.yaml ,把 packages 目录一写,公用依赖能被统一管理,每个子包还能相互引用。

选工具嘛,顺手最好,pnpm 就是那把让你工整干活、减少抽风的好家伙。


👋 嘿,我是那个总在死磕工程化的程序媛。如果这篇踩坑记让你少熬了一夜,别犹豫,赶紧收藏转发,下次 npm install 卡住的时候,你肯定需要再翻出来看。也欢迎来评论区留言,说说你被 node_modules 折磨得最惨的一次经历~