用一个命令运行名称指向的任何内容——文件、package.json 脚本、本地 bin 或注册表上的包。

nubx index.ts          # 运行文件
nubx test --snapshot   # 运行 package.json 脚本
nubx rolldown -b       # 运行本地 CLI
nubx cowsay "hi"       # 运行远程 CLI(dlx)

优先使用 nubx。它通过每个层级解析名称并运行第一个匹配项,所以一个命令涵盖了:你写的文件、package.json 中的脚本、node_modules 中已有的 CLI,以及你尚未安装的工具。它统一的单用途命令——nub runnub execnub dlx——在你只想要一个层级时仍然可用。

解析顺序

裸名称按第一个匹配的层级解析:

  • 文件 — 路径(./x/abs/x)或当前目录中该名称的文件
  • 脚本 — 该名称的 package.json 脚本
  • 本地 binnode_modules/.bin 链上的可执行文件
  • 注册表 — 获取并运行的包,当没有本地匹配时

脚本优先于 bin,文件优先于两者——与 nub run 相同的优先级。前导 -p/--package 规范跳过本地解析直接获取。

每个层级对应一个独立命令——nubx 为你选择正确的命令:

nubx <file>        # 等同于 `nub <file>`
nubx <script>      # 等同于 `nub run <script>`
nubx <local-bin>   # 等同于 `nub exec <local-bin>`
nubx <remote-bin>  # 等同于 `nub dlx <remote-bin>`

其他运行器只覆盖一个切片——node 运行文件,npx 运行或获取 bin,pnpm 将工作拆分到 runexecdlx

目标nodepnpmpnpm runpnpm execpnpm dlxnpxpnpxnubx
JS/TS 文件
package.json 脚本
本地 bin
注册表包

只有 npxnubx 在一个命令中从本地回退到注册表——npx 针对 bin,nubx 针对完整链。每个 pnpm 命令只针对一个层级,未命中时报错。

从 npx 迁移

两个有意为之的差异。本地脚本或文件优先,不只是 bin——如果一个项目同时有 lint 脚本和 lint bin,nubx lint 运行脚本(使用 nub exec lint 强制运行 bin)。注册表获取需要同意:npx 静默下载的地方,nubx 在首次获取时提示并在 CI 中失败关闭,所以加 -y 或将工具声明为依赖。

从注册表获取

当没有本地匹配时,nubx 可以获取一个包,运行其 bin,并记住你的同意——但它从不在静默中运行远程代码。给定工具的首次运行会提示:

$ nubx cowsay "Hello"
nubx: cowsay is not installed locally. Download and run it? [y/N] y
dependencies:
+ cowsay@1.6.0

 _______
< Hello >
 -------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

回答一次 y,后续运行跳过提示。固定版本(nubx cowsay@1.5.0)会被无限期记住;浮动版本(nubx cowsay,跟踪 latest)在一天后重新确认,所以已移动到新版本的工具在运行新代码前会再次询问。

在终端之外没有办法询问,所以 nubx 在 CI 中失败关闭——以及任何 stdin 不是终端的时候:

$ nubx cowsay "hi"          # 在 CI 中
nubx: refusing to download cowsay in CI.
  A CI job should declare the tool as a dependency, or pass -y to fetch it.

获取的包通过 Nub 的正常安装解析器运行,因此注册表安全机制生效:minimumReleaseAge 冷却窗口(参见信任下限)和跳过的生命周期脚本。远程 bin 运行器是在提示之外显式获取和运行包的方式,并完整覆盖两者。

-y

传递 -y--yes)以预先同意:它允许在 CI 或任何非交互上下文中获取,并跳过首次运行提示。这是脚本和 CI 中"是的,下载并运行它"的有意手势。

nubx -y cowsay "hi"

传递参数

名称之后的所有内容都原封不动传递给底层文件、脚本或工具——不需要记住 -- 分隔符。

nubx eslint . --fix --max-warnings 0
nubx vitest run --coverage

--node

传递 --node 以禁用运行时增强运行工具——参见运行时概览了解完整约定。解析、注册表获取和 nubx 自身的机制仍然运行;仅增强关闭。

nubx --node prisma generate

相关