GitHub Action
官方 setup-node action 的直接替代品。在工作流中交换一行,Nub 安装自身、提供项目固定的 Node 并将其放在 PATH 前方,使每个步骤保持不变地继续工作。
actions/setup-node 的直接替代品。交换一行,你的工作流继续工作:
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: nubjs/setup-nub@v0
- run: nub install
- run: nub run test之后的一切解析到项目固定的 Node——与 setup-node 相同的约定。后续步骤中的裸 node、npm 和 npx 运行固定版本,因为该 action 将该 Node 的 bin 目录放在 runner 全局 PATH 的前方。完整的 actions/setup-node 文档描述了此 action 镜像的接口。
- uses: actions/checkout@v4
- uses: nubjs/setup-nub@v0
- run: node --version # 项目固定的 Node,不是 runner 默认值
- run: nub install工作原理
该 action 安装 nub CLI,然后在设置步骤期间急切地将项目固定的 Node 提供到 Nub 的缓存中——在任何步骤运行之前下载并就绪,从不在构建中途懒加载。固定从项目的 Node 版本来源解析,按此顺序:
package.json#/devEngines/runtime.node-version.nvmrcpackage.json#/engines/node
该解析的 Node 的 bin 目录被添加到全局 PATH,所以裸 node/npm/npx 和每个后续步骤看到固定版本——与 setup-node 给出的相同 PATH 保证。无固定的项目没问题:急切步骤干净跳过,Nub 在运行时提供。
因为固定位于仓库中,actions/checkout 必须在此 action 之前运行。
所有 actions/setup-node 输入都被接受,所以交换总是机械的——Nub 无法遵守的输入被接受并忽略而非报错。
输入
| 输入 | 默认值 | 描述 |
|---|---|---|
nub-version | latest | 要安装的 Nub 版本——npm 理解的任何 semver 范围。 |
node-version | 提供此版本并将其放在 PATH 前方而非项目固定。 | |
node-version-file | 从文件读取版本并将其放在 PATH 前方而非项目固定。 | |
cache | auto | 缓存 Nub 的存储和已提供的 Node 工具链。在锁文件或 packageManager/devEngines 上自动启用;显式值优先。 |
package-manager-cache | true | 设为 false 以关闭上方的自动缓存。 |
cache-dependency-path | 哈希键控缓存的锁文件路径。 | |
cache-key-prefix | 注入缓存键的前缀以独立限定或清除缓存。 | |
working-directory | checkout 根 | 从中解析固定和锁文件的目录,用于 monorepo 子目录。 |
registry-url | 设置认证访问的注册表;通过 NPM_CONFIG_USERCONFIG 写入临时用户级 .npmrc。 | |
scope | scope 注册表的 scope;对 GitHub Packages 回退到仓库所有者。 | |
always-auth | false | 在每个注册表请求上认证。 |
token | github.token | 解析 Nub 版本范围时 GitHub API 速率限制缓解的令牌。 |
setup-node 输入 check-latest、architecture、mirror 和 mirror-token 被接受并忽略——存在以使交换从不出错,无效果。version 输入是 nub-version 的弃用别名并发出警告。
nub-version
固定要安装的 CLI 版本——npm 理解的任何 semver 范围。默认最新发布:
- uses: nubjs/setup-nub@v0
with:
nub-version: ^0.1.0node-version
为此次运行在 PATH 前方放置特定版本而非项目固定。该 action 在设置期间提供它并放到全局 PATH 上,所以下游的裸 node 是此版本:
- uses: nubjs/setup-nub@v0
with:
node-version: {{NODE_VERSION}}当作为 nub 调用时,Nub 仍运行项目声明的固定,所以如果此输入与该固定不同,action 会警告。省略它让 Nub 自动解析和提供项目固定。
node-version-file
从文件读取 Node 版本,然后提供并放到 PATH 前方。接受 .node-version、.nvmrc 和 package.json(读取 devEngines.runtime,然后 engines.node):
- uses: nubjs/setup-nub@v0
with:
node-version-file: .node-versioncache
缓存默认开启——当项目看起来可安装时自动启用,镜像 setup-node。自动检测在锁文件或声明 packageManager 或 devEngines 的 package.json 上触发。显式设置输入以覆盖:
- uses: nubjs/setup-nub@v0
with:
cache: true # 强制开启;`false` 强制关闭包管理器名称(npm/pnpm/yarn/bun)为 setup-node 兼容性被接受并视为开启——Nub 无论包管理器如何都保持一个存储。
缓存键从项目的锁文件和 Node 固定派生,锁文件按此顺序自动检测:
pnpm-lock.yamlpackage-lock.jsonbun.lockbun.lockbyarn.lock
package-manager-cache
上方自动缓存的禁用旋钮。设为 false 以关闭缓存而不设置 cache:
- uses: nubjs/setup-nub@v0
with:
package-manager-cache: falsecache-dependency-path
覆盖自动检测的锁文件用于缓存键控——锁文件路径、glob 或换行分隔的列表:
- uses: nubjs/setup-nub@v0
with:
cache-dependency-path: |
app/pnpm-lock.yaml
packages/*/pnpm-lock.yamlrestore-keys 梯子在锁文件更改时给出部分热命中。
cache-key-prefix
将前缀注入缓存键(nub-<os>-<arch>-<prefix>-<hash>)以独立于锁文件限定或清除缓存:
- uses: nubjs/setup-nub@v0
with:
cache-key-prefix: v2working-directory
从子目录而非 checkout 根解析 Node 固定和锁文件——用于 package.json/.node-version 位于根下方的 monorepo:
- uses: nubjs/setup-nub@v0
with:
working-directory: apps/webregistry-url
设置认证注册表访问。该 action 通过 NPM_CONFIG_USERCONFIG 写入临时用户级 .npmrc 并将认证令牌连接到 NODE_AUTH_TOKEN:
- uses: nubjs/setup-nub@v0
with:
registry-url: https://registry.npmjs.org
- run: nub install
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}对于 GitHub Packages,指向注册表,scope 默认为仓库所有者:
- uses: nubjs/setup-nub@v0
with:
registry-url: https://npm.pkg.github.com
- run: nub install
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}scope
scope 注册表的 scope。对 npm.pkg.github.com 回退到仓库所有者。registry-url 写入的 .npmrc 遵循与 setup-node 相同的约定,所以现有认证设置不变移植。
always-auth
将 always-auth=true 写入 .npmrc 以在每个注册表请求上认证。
token
解析 Nub 版本范围时 GitHub API 速率限制缓解的令牌(和 GHES 上的 Node 下载)。在 github.com 上默认为 github.token——大多数工作流不需要显式设置它。
输出
| 输出 | 描述 |
|---|---|
nub-version | 已安装的 Nub 版本。 |
node-version | 设置期间提供的 Node 版本;未提供任何内容时为空。 |
cache-hit | 是否恢复了精确的存储缓存匹配;未命中时为空,镜像 actions/cache。 |
caching-enabled | 此运行是否激活缓存,独立于是否命中缓存。 |
与 setup-node 的差异
直接替代是机械的,所以差异很小且很少出现:
cache输入是布尔值而非包管理器名称。包管理器名称仍有效(视为开启),因为 Nub 无论包管理器如何都保持单个存储。- 注册表
.npmrc新写入到$RUNNER_TEMP并通过NPM_CONFIG_USERCONFIG指向,而非合并到用户.npmrc中。两者由 npm 和 Nub 的包管理器相同解析。