当前位置: 技术文章>> 详细介绍如何使用 pnpm – 安装和常用命令

文章标题:详细介绍如何使用 pnpm – 安装和常用命令
  • 文章分类: 前端
  • 27162 阅读

PNPM 类似于 npm,但它更快、更高效。毕竟,起始 p 代表 p性能。

根据其创建者 Zoltan Kochan 的说法,pnpm“允许您节省千兆字节的磁盘空间”。

许多流行的项目,包括Next.js,Vite,Svelte,甚至freeCodeCamp都使用pnpm。因此,如果您还没有,现在是尝试此工具的好时机。我相信你的时间不会被浪费。

在本文中,我不会详细介绍为什么 pnpm 比 npm 更快、更高效。如果您想了解更多信息,可以查看官方文档。

本文的目的是快速开始使用 pnpm,以便您可以执行以前使用 npm 或 yarn 执行的日常任务。拿起你最喜欢的一杯茶或咖啡,让我们开始吧!

如何安装 pnpm

我假设您的机器上已经安装了现代版本的 Node.js。这些现代版本带有一个名为 .它允许您管理您的 Node 包管理器。corepack

是的,你没看错!这是 Node 的一个实验性功能,但它运行良好。

因此,要开始使用它,您首先需要通过从终端输入以下命令来启用它,该命令具有在系统上安装 pnpm(以及 yarn)的效果:

corepack enable

就是这么简单。现在,如果您运行,您将看到您刚刚安装的版本。但这可能不是 pnpm 的最新版本。如果是这种情况,可以使用以下命令安装最新版本的 pnpm:pnpm --version

corepack prepare pnpm@latest --activate

请记住,有很多方法可以在您的系统上安装 pnpm,您可以在安装文档中阅读所有这些方法。我最喜欢的是我上面展示的公式。corepack

如何配置 Shell 以提高效率(可选)

好了,你现在已经安装了pnpm。但是可以改进默认的命令行体验,以节省一些精力。

请注意,此部分是可选的。如果需要,可以跳到下一部分。但是,如果您真的想设置它以使 CLI 体验愉快,让我们学习如何做到这一点。

pnpm很难输入 - 所以设置一个别名

如果你发现像我一样很难打字,你可以设置一个别名来节省你的一些精力。如果您使用的是 Linux 或 MacOS,只需将以下内容放入 shell 配置中(、 或):pnpm.bashrc.zshrcconfig.fish

alias pn=pnpm

如果要在 Powershell (Windows) 中设置别名,可以查看此文档。

如何设置制表符补全

在 pnpm 中,有两种方法可以做到这一点。两者都有其优点和缺点。

首先,我将与您分享我最喜欢的方法。它是一个名为 shell 插件,可用于 zsh、fish shell 和 Powershell 核心。它仅涵盖最常用的命令。如果你是 Arch Linux 和 zsh 用户,你可以用任何 AUR 助手来安装它。例如,如果使用 ,请运行以下命令进行安装:pnpm-shell-completionyay

yay -S pnpm-shell-completion

然后在文件中添加以下行以加载它:.zshrc

source /usr/share/zsh/plugins/pnpm-shell-completion/pnpm-shell-completion.zsh

现在它应该起作用了。如果您使用任何其他受支持的 shell,请按照插件的文档了解如何安装它。

第二种方法内置于 pnpm 中。若要设置此样式的自动完成,请运行以下命令:

pnpm install-completion

然后按照它给你的步骤操作。此方法比第一种方法涵盖更多的命令。但它有一些限制——例如,它不能自动完成你的脚本。例如,它也无法自动完成要卸载的任何依赖项名称。package.json

如何使用pnpm

现在,您应该安装了带有别名和 Tab 完成符的 pnpm。不再有延迟——让我们看看如何使用 pnpm。

如何使用初始化新项目pnpm

若要获取当前目录中的默认值,请运行以下命令:package.json

pnpm init

与 npm 不同,它不会以交互方式创建它,您无需为此指定标志。-y

如何安装软件包

若要将包安装为依赖项,语法为:

pnpm add <pkg>

若要将包安装为开发依赖项,必须传递 (or ) 标志:-D--save-dev

pnpm add -D <pkg>

若要全局安装包,请使用以下标志:-g

pnpm add -g <pkg>

如何安装所有依赖项

假设您从 GitHub 克隆了一个项目。它确实有一个文件,但没有(你不应该用 Git 跟踪)。现在要安装其中的所有依赖项,该命令与以下命令非常相似:package.jsonnode_modulesnode_modulespackage.jsonnpm

pnpm install

pnpm i

如何运行脚本package.json

这个过程也与 非常相似。执行此操作的明确方法是使用该命令。如果您有一个名为 的脚本,则可以使用以下命令执行它:npmrunbuild

pnpm run build

你也可以用它来做同样的事情。这是一种速记格式,也可以做其他事情。在本文中,我们将很快了解有关速记的更多信息。pnpm build

如何运行依赖项附带的命令

您可以使用 运行依赖项附带的命令。pnpm exec

安装软件包时,如果它有 字段指定的命令 ,您将在目录中获得同名的可执行文件。其目的是执行相应的文件。binpackage.jsonnode_modules/.bin

pnpm exec在 (即 ) 之前,然后执行给定的命令。./node_modules/.binPATHPATH=./node_modules/.bin:$PATH

下面是一个示例,演示如何安装为开发依赖项,然后运行命令以创建文件:typescripttsctsconfig.json

pnpm add -D typescript

pnpm exec tsc --init

与命令类似,您也可以省略并仅用于执行相同的操作。当您的 .在下一节中,我们将仔细研究这种速记语法。pnpm runexecpnpm tsctscpackage.json

请注意,由于可以访问由 中指定的路径解析的所有命令,因此您可以访问许多系统命令,例如 、 等。pnpm execPATHrmls

如何工作pnpm <command>

pnpm <command>工作原理如下:

如果是 pnpm 命令(即 ,依此类推),则执行该命令。<command>addinstall

否则,如果是在 中找到的脚本,请执行 .<command>package.jsonpnpm run <command>

否则执行 .pnpm exec <command>

因此,作为一个方便的快捷方式,其中和是没有回退的显式命令。pnpm <command>pnpm execpnpm run

如何更新程序包

要根据 中的指定范围将包更新到最新版本,请运行以下命令:package.json

pnpm up

要将所有依赖项更新到其最新版本,请忽略 中指定的范围,请运行以下命令:package.json

pnpm up --latest

如何删除包

要从 和 ur 中删除包,可以使用 。例如,如果您安装了 ,则可以使用以下命令将其删除:node_modulespackage.jsonpnpm rmexpress

pnpm rm express

若要删除全局安装的包,请使用该标志。以下是删除全局安装的软件包的示例:-gnodemon

pnpm rm -g nodemon

有没有其他选择?npx

是的,这是命令。它与 npx 非常相似。它从注册表下载指定的包,而不将其安装为依赖项,然后运行它公开的任何默认命令二进制文件。pnpm dlx

例如,您可以运行 package 公开的命令,如下所示,以打印一头牛的 ASCII 艺术,说出您传递的字符串:cowsay

pnpm dlx cowsay hi freeCodeCamp

现在您可能想知道,如果一个包公开了多个命令二进制文件,那么选择哪个命令作为默认值?或者如何显式指定命令二进制文件?pnpm dlx

让我们先看看默认命令二进制文件是如何确定的:

如果字段只有一个条目,则使用该条目。binpackage.json

否则,如果字段中有与包名称匹配的命令名称,则忽略作用域部分(如果有),则使用该命令。binpackage.json

否则,pnpm 无法确定默认命令,并抛出一个错误,其中包含一条有用的错误消息,该消息很可能会回答第二个问题。

要显式指定特定命令,您需要先使用该选项安装软件包,然后在 之后指定该命令。--packagedlx

例如,包向命令二进制文件和 .现在,如果你想在没有 或 的情况下运行来创建一个文件,你可以像下面这样使用:typescripttsctsservertsc --inittsconfig.jsontypescriptnode_modulespackage.jsonpnpm dlx

pnpm --package=typescript dlx tsc --init

结论

在本教程中,您已经了解了 pnpm 是什么以及如何安装它。我们还介绍了您每天很可能需要的几个常见的 pnpm 命令。



推荐文章