首页 前端知识 包管理器的秘密花园:从npm到pnpm的全面解析与幻影依赖揭秘

包管理器的秘密花园:从npm到pnpm的全面解析与幻影依赖揭秘

2025-03-15 13:03:38 前端知识 前端哥 14 351 我要收藏

包管理器来源

代码共享方案

1.官网/github 比较麻烦,新版本维护困难

2.npm registry 本仓库被npm工具管理 版本更新方便

npm的基本使用及配置文件package.json

npm的基本使用大家都应该很熟了,接下来就介绍配置文件:

配置文件常见属性

name:name 是指软件包名
version:指发布包版本号,x.x.x的形式。

注意:遵守semver版本规范  x.y.z

description:项目描述
keywords:项目关键字
scripts:运行命令集合(字典)
dependencies:生产依赖关系对象,对象内的所有依赖在正式发布打包时包含在内
devDependencies:本地开发环境依赖、项目构建、和测试依赖的存放目录

生产依赖/开发依赖都用到的依赖放在dependencies

比如为了对项目进行打包用到的只在生产环境的依赖放在devdependencies ,eg:webpack

或者-D 缩写

npm install的基本流程

npm install的核心流程大致分为四步:

  1. 依赖解析:首先读取项目的package.jsonpackage-lock.json(如果有),确定依赖树。package-lock.json会锁定具体版本,确保环境一致性;若无lock文件,则按语义化版本规则(SemVer)选择最新兼容版本。

  2. 缓存检查:npm会优先检查本地缓存(~/.npm目录),若缓存中存在所需版本的包,则直接复用,减少下载开销。

  3. 依赖下载与扁平化:从npm仓库下载缺失的包,并按“扁平化”规则安装到node_modules,即相同依赖的顶层版本会被共享,冲突版本会嵌套在子目录中。

  4. 脚本执行与lock更新:安装完成后,执行包内预定义的生命周期脚本(如postinstall),并更新package-lock.json以确保后续安装的一致性。

整个过程旨在保证依赖树的准确性和安装效率,同时通过lock文件避免“在我的机器上能跑”的问题。

npx

本来在全局下载某个包之后,在本文件夹中的moudle文件夹中下载的包,查找时只能查找到全局中的包版本,想解决这个问题就需要在命令前加npx

这个工具就会在你找包时,优先从文件夹的node_modules文件夹中找

但是webpack是特殊的会自己从依赖文件夹里面找

yarn,cnpm,pnpm等

yarn:npm的竞争对手

cnpm:

由于国外服务器原因,npm依赖下载失败

使用taobao镜像服务器 https://registry.npmmirror.com(国内)或者 vpn

注意:部分企业私有包需切换回官方源或其他私有仓库

pnpm(重要)

先来介绍一个操作系统概念;

硬连接和软连接:

 pnpm的优点就在快,节省磁盘空间

为什么呢?

同时pnpm利用软硬连接设置不同建立非扁平化的依赖文件夹,防止项目误引用非正常引入的包,进而产生幻影依赖问题

幻影依赖

在开发中使用的开发依赖中的依赖被项目使用后,在打包之后开发依赖不会被打包,项目中所使用的开发依赖的依赖就会导致幻影依赖的生成

或者你使用了依赖的依赖,原本的依赖更新后那个依赖无法使用了,你就很难debug

使用的包在扁平化的依赖文件夹中所依赖的库被项目中使用

pnpm使用软硬连接建立的非扁平化的依赖文件夹,防止项目误引用非正常引入的包,产生报错,同时通过硬链接节省磁盘空间

转载请注明出处或者链接地址:https://www.qianduange.cn//article/23740.html
标签
评论
会员中心 联系我 留言建议 回顶部
复制成功!