运行器
一个命令运行名称指向的任何内容——文件、脚本、本地 CLI 或注册表上的包。本地解析优先,注册表获取仅在你的同意下进行,从不在 CI 中静默执行。
用一个命令运行名称指向的任何内容——文件、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 run、nub exec 和 nub dlx——在你只想要一个层级时仍然可用。
解析顺序
裸名称按第一个匹配的层级解析:
- 文件 — 路径(
./x、/abs/x)或当前目录中该名称的文件 - 脚本 — 该名称的
package.json脚本 - 本地 bin —
node_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 将工作拆分到 run、exec 和 dlx:
| 目标 | node | pnpm | pnpm run | pnpm exec | pnpm dlx | npx | pnpx | nubx |
|---|---|---|---|---|---|---|---|---|
| JS/TS 文件 | ||||||||
package.json 脚本 | ||||||||
| 本地 bin | ||||||||
| 注册表包 |
只有 npx 和 nubx 在一个命令中从本地回退到注册表——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相关
- 脚本运行器 —
nub run,支持工作区的package.json脚本运行器。 - 本地 bin 运行器 —
nub exec,从node_modules/.bin运行本地 CLI,从不访问注册表。 - 远程 bin 运行器 —
nub dlx,显式从注册表获取并运行包。 - 运行文件 — TypeScript 优先的文件执行。
- 监听模式 — 变更时重启。
- 模块解析 — 解析器,包括 Yarn Plug'n'Play。