赞
踩
pnpm 代表 performant npm(高性能的npm),同 npm 和 Yarn,都属于
Javascript 包管理安装工具,它较 npm 和 Yarn 在性能上得到很大提升,被称为
快速的,节省磁盘空间的包管理工具。
使用 npm、Yarn 时,依赖每次被不同的项目使用,都会重复安装一次。
而在使用 pnpm 时,依赖会被存储在内容可寻址的存储中,所以:
如果你用到了某依赖项的不同版本,只会将不同版本间有差异的文件添加到仓库。
例如,如果某个包有100个文件,而它的新版本只改变了其中1个文件。那么 pnpm
update 时只会向存储中心额外添加1个新文件,而不会因为仅仅一个文件的改变复制整新版本包的内容。
所有文件都会存储在硬盘上的某一位置。
当软件包被被安装时,包里的文件会硬链接到这一位置,而不会占用额外的磁盘空间。
这允许你跨项目地共享同一版本的依赖。
因此,您在磁盘上节省了大量空间,这与项目和依赖项的数量成正比,并且安装速度要快得多!
摘自官网:https://pnpm.io/zh/motivation
pnpm 使用 符号链接Symbolic
link(软链接)来创建依赖项的嵌套结构,将项目的直接依赖符号链接到
node_modules
的根目录,直接依赖的实际位置在.pnpm/<name>@<version>/node_modules/<name>,依赖包中的每个文件再
硬链接(Hard
link)到
.pnpm store ( pnpm 资源在磁盘上的存储位置 )
.pnpm store:
在 Linux 上,默认是~/.local/share/pnpm/store
在 macOS 上: ~/Library/pnpm/store
在 Windows 上: %LOCALAPPDATA%/pnpm/store
可以通过执行 pnpm store path 命令查看 store 存储目录的路径。
注:建议 Node 版本 14 及以上,安装 7.x Pnpm
以 vue-hb-hyberos-main-web (HyberOS_web) 项目为例
安装步骤
安装pnpm:npm install -g pnpm
查看pnpm版本:pnpm -v
查看源:pnpm config get registry
切换源:pnpm config set registry <淘宝源或其他源地址>
删除npm或yarn生成的node_modules:rm -rf node_modules
安装依赖:pnpm install
启动项目(按实际 package.json 配置文件为准):pnpm dev
如果项目安装的依赖不多且比较熟悉,可以直接使用
从其他软件包管理器的 lock 文件生成 pnpm-lock.yaml:pnpm import
# 注:可能存在"幻影依赖"会导致所需的依赖包要一个个执行 pmpm add
<pkg>
安装依赖,不更新 lock 文件:pnpm install --frozen-lockfile
执行 pnpm install 时可能会产生的问题
依赖较多、交杂,某些依赖版本较低
存在"幻影依赖"(依赖中的依赖):比如一些依赖可能在node_modules
根目录下让所有的依赖于它的依赖
自动默认安装缺失的依赖
依赖丢失或者找不到的话 命令自动失败
install 失败的原因
由于 npm 和 Yarn 会将所有依赖平铺在
node_modules,在项目中可以访问任何依赖的包
默认配置的 pnpm 创建 node_modules 时不会平铺依赖
“幻影依赖” 本身原因是 依赖中的依赖 被项目工程中引用,切换 pnpm
后,利用软硬链接 + .pnpm 隔绝了这种不正常的使用方式,导致问题出现
解决方案
需要将依赖提升至 node_modules 根目录
(较新的项目不建议使用,此方法会影响 pnpm 的部分性能)
在根目录下创建 .npmrc 文件
编写配置项( 官网查看更多配置项 )
shamefully-hoist = true
auto-install-peers = true
strict-peer-dependencies = false
再执行 pnpm install 安装依赖,然后参考 package.json 中的配置 pnpm
dev 启动项目。
清理长期不用的依赖
随着项目与依赖包的增多,.pnpm-store
文件夹会越来越大,可以使用以下命令删除存储中未被引用的包:
清理当前项目下的冗余项:pnpm prune
清理全局冗余项:pnpm store prune
官网更多说明(注:清理频次不要太高,当 存储服务器
正在运行时,这个命令是被禁止的)
设置源
查看源:pnpm config get registry
切换源:pnpm config set registry <淘宝源或其他源地址>
配置全局安装路径: pnpm config set store-dir “全局地址”
例:pnpm config set store-dir D:\node\pnpm\global
配置全局缓存路径 :npm config set cache-dir “缓存地址”
例:pnpm config set cache-dir D:\node\pnpm\cache
初始化
注意:pnpm init 只能一键快速生成 package.json
文件,如果要一步一步填写每个属性的值生成 package.json 文件,则需要通过
npm init 生成,如果要一键快速生成,需要增加 -y 参数 npm init -y 来生成。
管理依赖
安装依赖包到:dependencies :pnpm add <pkg>
安装依赖包到:devDependencies:pnpm add -D <pkg>
安装依赖包到:optionalDependencies:pnpm add -O <pkg>
全局安装依赖包:pnpm add -g xxx
安装项目全部依赖:pnpm install**,**别名 pnpm i
更新依赖包:pnpm update**,**别名 pnpm up
删除依赖包:pnpm remove**,**别名 pnpm rm/uninstall/un
查看依赖
查看本地安装的依赖:pnpm list**,**别名 pnpm ls
查看全局安装的依赖:pnpm list --global**,**别名 pnpm ls --g
检查过期的依赖:pnpm outdated
运行脚本(按实际 package.json 配置文件为准)
运行自定义脚本:pnpm run xxx**,**别名 pnpm xxx
运行test测试脚本:pnpm test
启动套件创建项目: pnpm create
运行start启动命令:pnpm start
发布依赖包
管理node环境
可实现 nvm、n 等 node 版本管理工具,安装并切换 node.js 版本的功能。
本地安装并使用:pnpm env use <node版本号>
全局安装并使用:pnpm env use --global <node版本号>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。