官网:https://classic.yarnpkg.com/
快速、可靠和安全的依赖性管理。
Yarn是您代码的软件包管理器。它允许您使用和共享(例如JavaScript)与来自世界各地的其他开发人员一起编写代码。Yarn是一个新的快速安全可信赖的可以替代 NPM 的依赖管理工具。Yarn 一种取代 npm 的 Node的模块管理器,yarn 同样是一个从 npm 注册源获取模块的工具。
Yarn允许您使用其他开发人员的解决方案来解决不同的问题,使您更容易开发软件。
超快:Yarn缓存了它下载的每个软件包,因此它永远不需要再下载它。它还并行化操作,以最大限度地提高资源利用率,因此安装时间比以往任何时候都快。
超级安全:Yarn在执行代码之前使用校验和来验证每个已安装的软件包的完整性。
超级可靠:使用详细但简洁的锁文件格式和确定性安装算法,Yarn能够保证在一个系统上工作的安装在任何其他系统上的工作方式完全相同。
npm install yarn -g
ln -s /usr/local/nodejs/bin/yarn /usr/local/bin/yarn
ln -s /usr/local/nodejs/bin/yarnpkg /usr/local/bin/yarnpkg
yarn -v
### 查看 yarn 安装包的位置
yarn global dir
/usr/local/share/.config/yarn/global。如果使用yarn global add xxx安装文件包,默认位置。
### 查看 yarn 安装包 bin 位置
yarn global bin
/usr/local/bin。如果使用yarn global add xxx安装文件包 bin 默认位置。
### 看 yarn 全局 cache 位置
yarn cache dir
/usr/local/share/.cache/yarn/v6。
### 看 yarn 镜像源
yarn config get registry
### 设置 yarn 镜像源
yarn config set registry https://registry.yarnpkg.com
yarn 全局配置文件,默认在/usr/local/share/.yarnrc,或者/root/.yarnrc
npm uninstall yarn -g
rm -f /usr/local/bin/yarn
rm -f /usr/local/bin/yarnpkg
rm -f /usr/local/bin/create-vite
rm -f /usr/local/bin/cva
rm -f /usr/local/share/.yarnrc
rm -f /root/.yarnrc
rm -rf /root/.yarn
rm -rf /usr/local/share/.config/yarn
rm -rf /usr/local/share/.cache/yarn
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/yarn
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/nodewin/yarn
find /root -name yarn* | xargs rm -rf
find /usr/local -name yarn* | xargs rm -rf
yarn add:添加一个软件包以在您当前软件包中使用。
yarn init:初始化软件包的开发。
yarn install:安装package.json文件中定义的所有依赖项。
yarn publish:向软件包管理器发布软件包。
yarn remove:从当前软件包中删除一个未使用的软件包。
快速的,节省磁盘空间的包管理工具
当使用 npm 时,如果你有 100 个项目,并且所有项目都有一个相同的依赖包,那么, 你在硬盘上就需要保存 100 份该相同依赖包的副本。然而,如果是使用 pnpm,依赖包将被 存放在一个统一的位置,因此:
如果你对同一依赖包需要使用不同的版本,则仅有 版本之间不同的文件会被存储起来。例如,如果某个依赖包包含 100 个文件,其发布了一个新 版本,并且新版本中只有一个文件有修改,则 pnpm update 只需要添加一个 新文件到存储中,而不会因为一个文件的修改而保存依赖包的 所有文件。
所有文件都保存在硬盘上的统一的位置。当安装软件包时, 其包含的所有文件都会硬链接自此位置,而不会占用 额外的硬盘空间。这让你可以在项目之间方便地共享相同版本的 依赖包。
最终结果就是以项目和依赖包的比例来看,节省了大量的硬盘空间, 并且安装速度也大大提高了!
快速:pnpm is up to 2x faster than npm
高效:node_modules 中的文件为复制或链接自特定的内容寻址存储库
支持 monorepos:pnpm 内置支持单仓多包
严格:pnpm 默认创建了一个非平铺的 node_modules,因此代码无法访问任意包
通过 npm 安装 pnpm
npm install -g pnpm
或
npm install -g @pnpm/exe
Homebrew 安装 pnpm
如果你已经安装了 Homebrew 软件包管理器,则可以使用如下命令赖安装 pnpm:
brew install pnpm
Scoop 安装 pnpm
如果你已经安装了 Scoop,就可以通过一下命令安装 pnpm:
scoop install nodejs-lts pnpm
通过 ln -s 创建一个软链接,通过 ln 可以创建一个硬链接。
ln -s /usr/local/nodejs/bin/pnpm /usr/local/bin/pnpm
ln -s /usr/local/nodejs/bin/pnpx /usr/local/bin/pnpx
他们的区别有以下几点:
软链接可理解为指向源文件的指针,它是单独的一个文件,仅仅只有几个字节,它拥有独立的 inode
硬链接与源文件同时指向一个物理地址,它与源文件共享存储数据,它俩拥有相同的 inode
pnpm -v
或者
pnpm --version
# 初始化项目,安装项目极其依赖
pnpm install
pnpm i
# 安装包, 默认情况下,任何新软件包都安装为生产依赖项,写入dependencies
pnpm add packName
pnpm add packName -S
# 安装包,安装为开发依赖项,写入 devDependencies
pnpm add packName -D
# 安装包,全局安装
pnpm add packName -g
# 移除项目,参数要与安装的时候相同
pnpm remove packName
npm uninstall pnpm -g
find /root -name pnpm*
find /usr/local -name pnpm*
find /root -name pnpx*
find /usr/local -name pnpx*
find /root -name pnpm* | xargs rm -rf
find /usr/local -name pnpm* | xargs rm -rf
find /root -name pnpx* | xargs rm -rf
find /usr/local -name pnpx* | xargs rm -rf
也可以单独删除:
rm -f /usr/local/bin/pnpm
rm -f /usr/local/bin/pnpx
rm -f /root/.cache/pnpm
rm -f /root/.local/share/pnpm
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/pnpm
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/pnpm.cmd
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/pnpm.ps1
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/pnpx
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/pnpx.cmd
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/pnpx.ps1
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/nodewin/pnpm
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/nodewin/pnpm.cmd
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/nodewin/pnpm.ps1
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/nodewin/pnpx
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/nodewin/pnpx.cmd
rm -rf /usr/local/nodejs/lib/node_modules/corepack/shims/nodewin/pnpx.ps1
以下列表列出了以往的 pnpm 版本和对应支持的 Node.js 版本。
Node.js | pnpm 5 | pnpm 6 | pnpm 7 | pnpm 8 |
---|---|---|---|---|
Node.js 12 | ?? | ?? | ? | ? |
Node.js 14 | ?? | ?? | ?? | ? |
Node.js 16 | ?? | ?? | ?? | ?? |
Node.js 18 | ?? | ?? | ?? | ?? |
Node.js 20 | ?? | ?? | ?? | ?? |
功能 | pnpm | Yarn | npm |
---|---|---|---|
工作空间支持(monorepo) | ?? | ?? | ?? |
有锁文件 | ?? - pnpm-lock.yaml | ?? - yarn.lock | ?? - package-lock.json |
隔离的 node_modules | ?? - 默认 | ?? | ?? |
提升的 node_modules | ?? | ?? | ?? - 默认 |
管理 Node.js 版本 | ?? | ? | ? |
自动安装 peers | ?? | ? | ?? |
Plug’n’Play | ?? | ?? - 默认 | ? |
零安装 | ? | ?? | ? |
修补依赖项 | ?? | ?? | ? |
支持覆盖 | ?? | ?? - 通过 resolutions | ?? |
内容可寻址存储 | ?? | ? | ? |
动态包执行 | ?? - 通过 pnpm dlx | ?? - 通过 yarn dlx | ?? - 通过 npx |
辅助缓存 | ?? | ? | ? |
列出许可证 | ?? - 通过 pnpm licenses list | ?? - 通过插件 | ? |