从依赖地狱到依赖天堂PNPM

发布于:2025-07-08 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

前言

使用 npm 全局安装(推荐)

总结

什么是Monorepo

主流解决方案

依赖管理优化

 使用PNPM 改造大型项目

1. 初始化 pnpm 工作区

2.初始子项目 package.json

3. 启动项目及安装依赖


前言

在现代前端开发中,高效的包管理和依赖治理对于项目的健康发展至关重要。随着项目规模的不断扩大,传统的 npm 和 yarn 在处理依赖关系时可能会遇到诸如依赖重复安装、磁盘空间浪费、依赖版本冲突等问题。而 pnpm(performant npm)作为新一代包管理工具,不仅显著提升了安装效率,还为项目依赖治理带来了全新的解决方案。

pnpm王牌登场 – 网状+平铺结构
pnpm (performant npm) 是一个快速、节省磁盘空间的包管理工具。它于 2017 年发布,是 npm 的替代品,专注于解决传统包管理工具存在的问题。

就这么简单,说白了它跟npm与yarn没有区别,都是包管理工具。但它的独特之处在于:

包安装速度极快
磁盘空间利用非常高效
安装包速度快

使用 npm 全局安装(推荐)

如果你已经安装了 Node.js 和 npm,可以直接运行:

npm install -g pnpm

安装完成后,检查版本:

pnpm -v

总结

场景 命令
安装在根目录 pnpm add <package> -w
安装在子包 pnpm add <package> --filter <子包名>
关闭警告 在配置中设置 ignore-workspace-root-check=true

这样可以避免意外将依赖装错位置!

什么是Monorepo

Monorepo (单体代码仓库)是一种将多个相关项目集中管理在单一代码仓库中的架构模式,适用于大型前端项目、微前端架构或前后端共存的系统。其核心优势包括共享依赖、统一代码规范及提升开发效率。 ‌12

主流解决方案

  1.  pnpm workspaces 
    pnpm原生支持Monorepo结构,通过pnpm-workspace.yaml配置实现依赖管理和多框架支持(如Vue、React)。适用于现代前端项目,支持按需构建和缓存复用。 ‌14

  2.  TurboRepo 
    Vercel 开发的工具,基于文件哈希实现增量构建和远程缓存共享,可显著提升大型仓库的构建效率。支持依赖提升白名单设置和循环依赖检测。 ‌45

  3.  Lerna 与 Nx 
    Lerna适合早期Monorepo实践,配合npm/yarn使用;Nx提供更完整的项目生命周期管理(包括依赖管理、构建优化等),适合复杂的前后端一体化项目。 ‌13

依赖管理优化

  • 依赖冲突‌:通过:ml-search[node-linker=hoisted]配置解决版本冲突,设置:ml-search[public-hoist-pattern]允许部分依赖提升。 ‌5
  • 构建加速‌: TurboRepo 支持:ml-search[增量构建](基于文件哈希缓存)和:ml-search[远程缓存共享],减少全量构建时间。

 使用PNPM 改造大型项目

1. 初始化 pnpm 工作区

首先,在项目根目录下创建 pnpm-workspace.yaml 文件:

packages:

  - 'src/*'

安装package.json已有的依赖文件 pnpm i 

2.初始子项目 package.json

每个子项目应该有独立的 package.json,使用pnpm init

{
  "name": "youyang",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "decimal.js": "^10.6.0"
  }
}

3. 启动项目及安装依赖

安装子项目依赖命令 pnpm add decimal.js --filter youyang

安装项目公共依赖命令 pnpm install --save decimal.js -w

启动项目命令pnpm run dev


网站公告

今日签到

点亮在社区的每一天
去签到