跳到主要内容
版本:11.x

pnx

别名:pnpm dlxpnpx

从注册源中获取软件包而不将其安装为依赖项,热加载它,并运行它暴露的任何默认命令二进制文件。

例如,若要在任何地方使用 create-vue 来初始化一个 Vue 项目,而不想在另一个项目下安装它,你可以运行:

pnx create-vue my-app

这将从注册源获取 create-vue 并使用给定的参数运行它。

你还可以指定想使用的软件包的确切版本:

pnx create-vue@next my-app

catalog: 协议也被支持, 允许你使用工作区目录中定义的版本:

pnx shx@catalog:

运行包管理器或运行时

新增于:v12.0.0-rc.6(仅限 pnpm v12)

指定一个 pnpm 提供的包管理器npmyarnbun)或运行时(nodedenobun),提供实际的程序,而不是安装与其同名的 npm 包:

pnx yarn@4 install
pnx npm@11 ci
pnx bun@1.3.0 install
pnx node@22 --version

那些 npm 包要么是该工具的另一个版本分支,要么是负责下载该工具的包装器,而这正是当初这样命名的初衷:过去运行 pnx yarn@4 会因找不到版本而失败,因为 Yarn 4 是以 @yarnpkg/cli-dist 的形式发布的;而运行 pnx node@22 时,执行的则是一个下载 Node.js 构建版本的包装器,而非该 Node.js 版本本身。

如果指定符用于定位软件包,而非请求特定发布版本,则会按原样安装其所指定的包:

pnx yarn@npm:yarn@1.22.22
pnx yarn@yarnpkg/berry

--package 指定一个包管理器,从而选择运行该包管理器的哪条命令:

pnx --package npm@11 npx create-something

配置项

--package <name>

在运行命令之前要安装的软件包。

示例:

pnx --package=@pnpm/meta-updater meta-updater --help
pnx --package=@pnpm/meta-updater@0 meta-updater --help

可以为安装提供多个软件包:

pnx --package=yo --package=generator-webapp yo webapp --skip-install

--allow-build

添加于:v10.2.0

允许在安装期间执行安装的包名列表。

示例:

pnx --allow-build=esbuild my-bundler bundle

dlx 执行的实际软件包默认允许运行 postinstall 脚本。 因此,如果在上面的例子中 my-bundler 必须在执行之前构建,那么它就会被构建。

--shell-mode, -c

在 shell 中运行该命令。 在 UNIX 上使用 /bin/sh,在 Windows 上使用 \cmd.exe

示例:

pnx --package cowsay --package lolcatjs -c 'echo "hi pnpm" | cowsay | lolcatjs'

--silent, -s

只打印执行命令的输出。

安全和信任政策

自 v11.0.0 版本起,pnx(及其别名 pnpm dlx / pnpx)在解析和获取请求的软件包时,会遵循项目级别的安全和信任策略设置:

这意味着 pnx 将拒绝执行新发布的或信任度不足的软件包,就像常规的 pnpm install 一样。