pnpm的使用

  1. 简介

pnpm 代表 performant npm(高性能的npm),同 npm 和 Yarn,都属于
Javascript 包管理安装工具,它较 npm 和 Yarn 在性能上得到很大提升,被称为
快速的,节省磁盘空间的包管理工具。

使用 npm、Yarn 时,依赖每次被不同的项目使用,都会重复安装一次。
而在使用 pnpm 时,依赖会被存储在内容可寻址的存储中,所以:

  1. 如果你用到了某依赖项的不同版本,只会将不同版本间有差异的文件添加到仓库。
    例如,如果某个包有100个文件,而它的新版本只改变了其中1个文件。那么 pnpm
    update 时只会向存储中心额外添加1个新文件,而不会因为仅仅一个文件的改变复制整新版本包的内容。

  2. 所有文件都会存储在硬盘上的某一位置。
    当软件包被被安装时,包里的文件会硬链接到这一位置,而不会占用额外的磁盘空间。
    这允许你跨项目地共享同一版本的依赖。

因此,您在磁盘上节省了大量空间,这与项目和依赖项的数量成正比,并且安装速度要快得多!

摘自官网:https://pnpm.io/zh/motivation

pnpm 使用 符号链接Symbolic
link(软链接)来创建依赖项的嵌套结构,将项目的直接依赖符号链接到
node_modules
的根目录,直接依赖的实际位置在.pnpm/@/node_modules/,依赖包中的每个文件再
硬链接(Hard
link)到
.pnpm store ( pnpm 资源在磁盘上的存储位置 )

.pnpm store:

  • Linux 上,默认是~/.local/share/pnpm/store

  • macOS 上: ~/Library/pnpm/store

  • Windows 上: %LOCALAPPDATA%/pnpm/store

可以通过执行 pnpm store path 命令查看 store 存储目录的路径

  1. npm、Yarn 切换 Pnpm

注:建议 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

  • 安装依赖,不更新 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

官网更多说明(注:清理频次不要太高,当 存储服务器
正在运行时,这个命令是被禁止的)

  1. 常用命令

官网查看更多命令

设置源

  • 查看源: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

初始化

  • 初始化package.json:pnpm init

注意:pnpm init 只能一键快速生成 package.json
文件,如果要一步一步填写每个属性的值生成 package.json 文件,则需要通过
npm init 生成,如果要一键快速生成,需要增加 -y 参数 npm init -y 来生成。

管理依赖

  • 安装依赖包到:dependencies :pnpm add

  • 安装依赖包到:devDependencies:pnpm add -D

  • 安装依赖包到:optionalDependencies:pnpm add -O

  • 全局安装依赖包: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

发布依赖包

  • 发布依赖包:pnpm publish

管理node环境

可实现 nvm、n 等 node 版本管理工具,安装并切换 node.js 版本的功能。

  • 本地安装并使用:pnpm env use

  • 全局安装并使用:pnpm env use --global

你可能感兴趣的:(npm,vue.js,前端)