跳到主要内容

7 篇博文 含有标签「Node.js」

查看所有标签

如果你刚接触前端工程化,第一次看到 npm installyarn installpnpm install,大概率会有一个疑问:

它们不都是“装包”的吗?为什么会有三个?

答案是:它们做的是同一件事,但解决问题的方式不一样。

  • npm 是 Node.js 官方自带的包管理器,历史最久,生态最稳。
  • Yarn 是在 npm 早期体验不够好的时候出现的,重点解决“慢”和“不稳定”。
  • pnpm 是在 Yarn 和 npm 继续发展之后,进一步解决“磁盘浪费”和“依赖不严谨”的问题。

这篇文章不讲太多绕人的术语,只用一条主线讲清楚:

为什么会从 npm 发展到 Yarn,再发展到 pnpm?

Node.jsnpmYarnpnpm包管理7 分钟阅读

很多人第一次用 pnpm,都会先感受到两个特点:

  • 安装速度挺快
  • node_modules 看起来和 npmYarn 不太一样

然后就会冒出一个问题:

pnpm 到底做了什么,为什么它既能省空间,又能保持依赖可用?

如果你去搜它的原理,常常会看到一堆词:

  • 内容寻址存储
  • 硬链接
  • 软链接
  • 严格依赖隔离

这些词本身没错,但一上来全堆出来,反而很容易越看越晕。

这篇文章我想用更通俗的方式,把 pnpm 的底层逻辑讲清楚。你不需要先懂文件系统,只要抓住一条主线:

pnpm 的核心目标,就是“同样的包尽量只存一份,同时又要让 Node.js 还能正常找到它”。

AOP(面向切面编程) 把与业务无关的通用逻辑(日志、鉴权、参数校验等)从业务代码里抽出来,在请求的固定阶段统一执行。NestJS 的 Middleware、Guard、Interceptor、Pipe、ExceptionFilter 就是这套思想的具体实现。下面先说明 AOP 是什么,再给出请求链路顺序、各组件的职责与用法,最后用表格做速查。

NestJSTypeScriptNode.js后端5 分钟阅读

在 NestJS 里,一个模块要用到另一个模块里的 Provider(如 Service),不能直接注入,必须先建立「谁导出、谁导入」的关系。下面先说普通引用怎么配,再说如何用 @Global() 做「全局引用」,最后对比两种方式。

NestJSTypeScriptNode.js后端2 分钟阅读

NestJS 的生命周期钩子让你在应用启动、运行和关闭的不同阶段插入逻辑。下面先说明可以实现这些钩子,再按时间顺序介绍五个钩子执行顺序如何触发关闭,以及 ModuleRef 的典型用法。

NestJSTypeScriptNode.js后端3 分钟阅读

在 NestJS 里,装饰器就是给类、方法、参数「贴标签」:告诉框架这个类是模块还是控制器、这个方法处理哪种 HTTP 请求、这个参数从哪拿值。下面按模块与类声明 → 依赖注入 → 路由与取参 → AOP 与元数据 → 控制响应分块整理,每类说明作用典型场景,方便查阅。

NestJSTypeScriptNode.js后端4 分钟阅读