diff --git a/.changeset/sour-brooms-double.md b/.changeset/sour-brooms-double.md new file mode 100644 index 000000000..fa2ec9bde --- /dev/null +++ b/.changeset/sour-brooms-double.md @@ -0,0 +1,5 @@ +--- +"fnm": patch +--- + +docs: add Simplified Chinese translations for docs pages and point README.zh-CN.md links to the localized docs diff --git a/.changeset/swift-taxis-whisper.md b/.changeset/swift-taxis-whisper.md new file mode 100644 index 000000000..854cb18d1 --- /dev/null +++ b/.changeset/swift-taxis-whisper.md @@ -0,0 +1,5 @@ +--- +"fnm": patch +--- + +docs: add Simplified Chinese README translation and link it with the English README diff --git a/README.md b/README.md index f5dbf9320..fb3748aab 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ GitHub Actions workflow status +[简体中文](./README.zh-CN.md) + > 🚀 Fast and simple Node.js version manager, built in Rust
diff --git a/README.zh-CN.md b/README.zh-CN.md new file mode 100644 index 000000000..9553378f9 --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,269 @@ +

+ Fast Node Manager (fnm) + Amount of downloads + GitHub Actions workflow status +

+ +[English](./README.md) + +> 🚀 使用 Rust 构建的快速且简洁的 Node.js 版本管理器 + +
+ Blazing fast! +
+ +## 特性 + +🌎 跨平台支持(macOS、Windows、Linux) + +✨ 单文件、易于安装、即时启动 + +🚀 以速度为核心设计 + +📂 支持 `.node-version` 和 `.nvmrc` 文件 + +## 安装 + +### 使用脚本(macOS/Linux) + +对于 `bash`、`zsh` 和 `fish`,我们提供了[自动安装脚本](./.ci/install.sh)。 + +请先确保操作系统已安装 `curl` 和 `unzip`,然后执行: + +```sh +curl -fsSL https://fnm.vercel.app/install | bash +``` + +#### 升级 + +在 macOS 上,直接执行 `brew upgrade fnm` 即可。 + +在其他操作系统上,升级 `fnm` 与安装方式几乎一致。为了避免在 shell 配置文件中重复写入内容,请在安装命令中传入 `--skip-shell`: + +```sh +curl -fsSL https://fnm.vercel.app/install | bash -s -- --skip-shell +``` + +#### 参数 + +`--install-dir` + +设置 fnm 的自定义安装目录。默认值为 `$XDG_DATA_HOME/fnm`(如果未定义 `$XDG_DATA_HOME`,Linux 会回退到 `$HOME/.local/share/fnm`,macOS 会回退到 `$HOME/Library/Application Support/fnm`)。 + +> **注意:** 在 macOS 上,此选项只有配合 `--force-install` 才有意义,因为默认安装方式是 Homebrew。 + +`--skip-shell` + +跳过向 shell 配置文件追加加载器配置。具体会根据当前用户的 shell(由 `$SHELL` 定义)判断目标文件。例如 Bash 为 `$HOME/.bashrc`,Zsh 为 `$HOME/.zshrc`,Fish 为 `$HOME/.config/fish/conf.d/fnm.fish`。 + +`--force-install` + +在 macOS 上,使用安装脚本安装已不推荐(推荐使用 Homebrew 公式),但该参数可强制继续使用脚本安装。 + +示例: + +```sh +curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "./.fnm" --skip-shell +``` + +### 手动安装 + +#### 使用 Homebrew(macOS/Linux) + +```sh +brew install fnm +``` + +然后,[为 fnm 配置 shell](#shell-setup) + +#### 使用 Winget(Windows) + +```sh +winget install Schniz.fnm +``` + +#### 使用 Scoop(Windows) + +```sh +scoop install fnm +``` + +然后,[为 fnm 配置 shell](#shell-setup) + +#### 使用 Chocolatey(Windows) + +```sh +choco install fnm +``` + +然后,[为 fnm 配置 shell](#shell-setup) + +#### 使用 Cargo(Linux/macOS/Windows) + +```sh +cargo install fnm +``` + +然后,[为 fnm 配置 shell](#shell-setup) + +#### 使用发行版二进制文件(Linux/macOS/Windows) + +- 下载适用于你系统的[最新发布二进制文件](https://github.com/Schniz/fnm/releases) +- 将其加入全局 `PATH` 环境变量 +- [为 fnm 配置 shell](#shell-setup) + +### 卸载 + +要移除 fnm(😢),只需删除主目录中的 `.fnm` 文件夹。你也应当编辑 shell 配置,去掉所有与 fnm 相关的引用(即阅读 [Shell Setup](#shell-setup),然后反向操作)。 + +## 自动补全 + +fnm 的自动补全随二进制文件一起提供: + +```sh +fnm completions --shell +``` + +其中 `` 可以是以下已支持的 shell 之一: + +- `bash` +- `zsh` +- `fish` +- `powershell` + +请按照你所使用 shell 的说明进行安装。 + + +### Shell Setup + +在开始使用 fnm 之前,需要先配置环境变量。 +方式是执行并求值 `fnm env` 的输出。 + +> [!TIP] +> 建议显式传入 shell(例如 `fnm env --shell bash`),而不是依赖运行时自动推断。这样会更快一些,也能避免进程树检测。 + +> [!NOTE] +> 请查看[配置](./docs/configuration.zh-CN.md)章节以启用强烈推荐的功能,例如自动切换版本。 + +在项目中添加 `.node-version` 非常简单: + +```bash +$ node --version +v14.18.3 +$ node --version > .node-version +``` + +根据你使用的 shell,参考以下指南: + +#### Bash + +将以下内容加入 `.bashrc`: + +```bash +eval "$(fnm env --use-on-cd --shell bash)" +``` + +#### Zsh + +将以下内容加入 `.zshrc`: + +```zsh +eval "$(fnm env --use-on-cd --shell zsh)" +``` + +#### Fish shell + +创建 `~/.config/fish/conf.d/fnm.fish`,并写入: + +```fish +fnm env --use-on-cd --shell fish | source +``` + +#### PowerShell + +在你的 profile 文件末尾加入以下内容: + +```powershell +fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression +``` + +- 在 macOS/Linux 上,profile 文件位于 `~/.config/powershell/Microsoft.PowerShell_profile.ps1` +- 在 Windows 上,路径可能是: + - `%userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1` PowerShell 5 + - `%userprofile%\Documents\PowerShell\Microsoft.PowerShell_profile.ps1` PowerShell 6+ +- 在 PowerShell 中可运行以下命令创建 profile 文件: + ```powershell + if (-not (Test-Path $profile)) { New-Item $profile -Force } + ``` +- 在 PowerShell 中可运行以下命令编辑 profile: + ```powershell + Invoke-Item $profile + ``` + +#### Windows Command Prompt(又名 Batch/WinCMD) + +fnm 也支持该环境,但覆盖并不完全。你可以为 [cmd.exe](https://superuser.com/a/144348) 或 [Windows Terminal](https://superuser.com/a/1855283) 设置启动脚本,并追加以下内容: + +```batch +@echo off +:: for /F will launch a new instance of cmd so we create a guard to prevent an infnite loop +if not defined FNM_AUTORUN_GUARD ( + set "FNM_AUTORUN_GUARD=AutorunGuard" + FOR /f "tokens=*" %%z IN ('fnm env --use-on-cd') DO CALL %%z +) +``` + +#### 在 Cmder 中使用 + +与普通 WinCMD 安装方式非常相似,只需做少量调整以支持从 Cmder 启动脚本调用。以下示例**假设**环境变量 `CMDER_ROOT` 已**设置**为 Cmder 安装的**根目录**。 +你可以这样做: + +- 新建一个 `.cmd` 文件来调用 fnm + +```batch +:: %CMDER_ROOT%\bin\fnm_init.cmd +@echo off +FOR /f "tokens=*" %%z IN ('fnm env --use-on-cd') DO CALL %%z +``` + +- 把它加入启动脚本 + +```batch +:: %CMDER_ROOT%\config\user_profile.cmd +call "%CMDER_ROOT%\bin\fnm_init.cmd" +``` + +你也可以将 `%CMDER_ROOT%` 替换为任何你觉得更方便的路径。 + +## [配置](./docs/configuration.zh-CN.md) + +[查看可用配置项和更完整的配置文档](./docs/configuration.zh-CN.md) + +## [用法](./docs/commands.zh-CN.md) + +[查看可用命令和更完整的用法文档](./docs/commands.zh-CN.md) + +## 贡献 + +欢迎 PR :tada: + +### 开发: + +```sh +# Install Rust +git clone https://github.com/Schniz/fnm.git +cd fnm/ +cargo build +``` + +### 运行二进制: + +```sh +cargo run -- --help # Will behave like `fnm --help` +``` + +### 运行测试: + +```sh +cargo test +``` diff --git a/docs/commands.zh-CN.md b/docs/commands.zh-CN.md new file mode 100644 index 000000000..3080c1e28 --- /dev/null +++ b/docs/commands.zh-CN.md @@ -0,0 +1,919 @@ +# `fnm` + +``` +一个快速且简洁的 Node.js 管理器 + +用法:fnm [OPTIONS] + +命令: + list-remote 列出所有远程 Node.js 版本 [aliases: ls-remote] + list 列出所有本地已安装的 Node.js 版本 [aliases: ls] + install 安装新的 Node.js 版本 [aliases: i] + use 切换 Node.js 版本 + env 打印并配置 fnm 所需的环境变量 + completions 将 shell 自动补全输出到 stdout + alias 为版本设置常用别名 + unalias 移除别名定义 + default 将某个版本设为默认版本,或获取当前默认版本 + current 打印当前 Node.js 版本 + exec 在 fnm 上下文中运行命令 + uninstall 卸载 Node.js 版本 [aliases: uni] + help 打印本消息或指定子命令的帮助信息 + +选项: + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) + + -V, --version + 打印版本号 +``` + +# `fnm list-remote` + +``` +列出所有远程 Node.js 版本 + +用法:fnm list-remote [OPTIONS] + +选项: + --filter + 按用户指定版本或 semver 范围过滤版本 + + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --lts [] + 仅显示 LTS 版本(可按 LTS 代号进一步过滤) + + --sort + 版本排序顺序 + + [default: asc] + + 可选值: + - desc: 按降序排序(从最新到最早) + - asc: 按升序排序(从最早到最新) + + --latest + 仅显示最新的匹配版本 + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) +``` + +# `fnm list` + +``` +列出所有本地已安装的 Node.js 版本 + +用法:fnm list [OPTIONS] + +选项: + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) +``` + +# `fnm install` + +``` +安装新的 Node.js 版本 + +用法:fnm install [OPTIONS] [VERSION] + +参数: + [VERSION] + 版本字符串。可以是部分 semver,或 `lts/NAME` 格式的 LTS 版本名 + +选项: + --lts + 安装最新 LTS 版本 + + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --latest + 安装最新版本 + + --progress + 显示用于下载状态的交互式进度条 + + [default: auto] + [possible values: auto, never, always] + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --use + 安装后立即使用该版本 + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) +``` + +# `fnm use` + +``` +切换 Node.js 版本 + +用法:fnm use [OPTIONS] [VERSION] + +参数: + [VERSION] + + +选项: + --install-if-missing + 若该版本尚未安装,则先安装 + + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --silent-if-unchanged + 如果执行该命令后使用版本不会变化,则不输出当前版本提示信息 + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) +``` + +# `fnm env` + +``` +打印并配置 fnm 所需的环境变量 + +该命令会生成一组 shell 命令,你应在 shell 中求值它们,以创建可用的 fnm 环境。 + +每种 shell 求值动态表达式的语法都不同。例如,在 Bash 和 Zsh 中可以写成 `eval "$(fnm env --shell bash)"`;在 Fish 中则是 `fnm env --shell fish | source` + +用法:fnm env [OPTIONS] + +选项: + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --shell + 要使用的 shell 语法。未提供时会自动推断 + + [possible values: bash, zsh, fish, powershell] + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --json + 输出 JSON 而不是 shell 命令 + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --use-on-cd + 输出在每次切换目录时切换 Node 版本的脚本 + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) +``` + +# `fnm completions` + +``` +将 shell 自动补全输出到 stdout + +用法:fnm completions [OPTIONS] + +选项: + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --shell + 要使用的 shell 语法。未提供时会自动推断 + + [possible values: bash, zsh, fish, powershell] + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) +``` + +# `fnm alias` + +``` +为版本设置常用别名 + +用法:fnm alias [OPTIONS] + +参数: + + + + + + +选项: + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) +``` + +# `fnm unalias` + +``` +移除别名定义 + +用法:fnm unalias [OPTIONS] + +参数: + + + +选项: + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) +``` + +# `fnm default` + +``` +将某个版本设为默认版本,或获取当前默认版本。 + +这是 `fnm alias VERSION default` 的简写 + +用法:fnm default [OPTIONS] [VERSION] + +参数: + [VERSION] + + +选项: + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) +``` + +# `fnm current` + +``` +打印当前 Node.js 版本 + +用法:fnm current [OPTIONS] + +选项: + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) +``` + +# `fnm exec` + +``` +在 fnm 上下文中运行命令 + +示例: +-------- +fnm exec --using=v12.0.0 node --version +=> v12.0.0 + +用法:fnm exec [OPTIONS] [ARGUMENTS]... + +参数: + [ARGUMENTS]... + 要运行的命令 + +选项: + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --using + 可以是显式版本号,或写有版本号的文件名 + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) +``` + +# `fnm uninstall` + +``` +卸载 Node.js 版本 + +> 警告:当传入别名时,会删除该别名所指向的 Node 版本,以及指向同一版本的其他别名。 + +用法:fnm uninstall [OPTIONS] [VERSION] + +参数: + [VERSION] + + +选项: + --node-dist-mirror + 镜像地址 + + [env: FNM_NODE_DIST_MIRROR] + [default: https://nodejs.org/dist] + + --fnm-dir + fnm 安装的根目录 + + [env: FNM_DIR] + + --log-level + fnm 命令的日志级别 + + [env: FNM_LOGLEVEL] + [default: info] + [possible values: quiet, error, info] + + --arch + 覆盖已安装 Node 二进制文件的架构。默认使用 fnm 二进制文件的架构 + + [env: FNM_ARCH] + + --version-file-strategy + Node 版本解析策略。当 `fnm use` 或 `fnm install` 未提供版本参数时,或在启用了 `--use-on-cd` 的求值流程中使用 + + [env: FNM_VERSION_FILE_STRATEGY] + [default: local] + + 可选值: + - local: 使用当前目录中定义的本地 Node 版本 + - recursive: 使用当前目录及其所有父目录中定义的 Node 版本 + + --corepack-enabled + 为每次新安装启用 corepack 支持。这会让 fnm 在每次安装 Node.js 后执行 `corepack enable`。更多信息见 + + [env: FNM_COREPACK_ENABLED] + + --resolve-engines [] + 当不存在 `.node-version` 或 `.nvmrc` 文件时,解析 `package.json` 中的 `engines.node` 字段。 + 该功能默认启用。若要禁用,请传入 `--resolve-engines=false`。 + + 注意:`engines.node` 可以是任意 semver 范围,最终会解析为满足条件的最新版本。 + 注意 2:如果你禁用了它,请在 GitHub 提交 issue 说明禁用原因。 + 未来禁用它可能不再产生效果,因此了解你为何禁用它很有价值。 + + [env: FNM_RESOLVE_ENGINES] + [possible values: true, false] + + -h, --help + 打印帮助(可用 '-h' 查看摘要) +``` + +# `fnm help` + +``` + +``` + diff --git a/docs/configuration.zh-CN.md b/docs/configuration.zh-CN.md new file mode 100644 index 000000000..bfeecfe5d --- /dev/null +++ b/docs/configuration.zh-CN.md @@ -0,0 +1,72 @@ +# 配置 + +fnm 内置了很多开箱即用的功能。其中一些默认未启用,因为它们会改变你 shell 的默认行为;另一些则是功能开关,用于避免破坏性变更,或在我们确认值得引入前作为实验特性存在。 + +这些能力都可以通过在初始化 shell 时给 `fnm env` 添加参数来配置。比如,如果你的 shell 配置是 `eval "$(fnm env)"`,那么可以改成 `eval "$(fnm env --my-flag=value)"` 来增加一个参数。 + +下面是这些特性与能力的列表: + +### `--use-on-cd` + +**✅ 强烈推荐** + +`--use-on-cd` 会在 `fnm env` 的输出中追加脚本逻辑,用于在你切换目录时挂载到 shell,并根据当前目录中的 `.node-version` 或 `.nvmrc`(若启用了 `--resolve-engines`,还包括 `package.json#engines#node`)自动切换 Node.js 版本。 + +这样你就不需要总是手动执行 `fnm use`,只要 `cd ` 即可生效。 + +### `--version-file-strategy=recursive` + +**✅ 强烈推荐** + +让 `fnm use` 和 `fnm install` 在未提供版本参数时,查找版本文件("dotfile")时会考虑父目录。 + +例如我们有如下目录结构: + +``` +repo/ +├── package.json +├── .node-version <- 内容:`20.0.0` +└── packages/ + └── my-package/ <- 我在这里 + └── package.json +``` + +并执行以下命令: + +```sh-session +repo/packages/my-package$ fnm use +``` + +那么 fnm 会切换到 Node.js v20.0.0。 + +如果不显式启用该参数,默认值是 `local`,不会向上遍历目录树,因此会输出: + +```sh-session +repo/packages/my-package$ fnm use +error: Can't find version in dotfiles. Please provide a version manually to the command. +``` + +### `--corepack-enabled` + +**🧪 实验性** + +当安装新的 Node.js 版本时执行 [`corepack enable`](https://nodejs.org/api/corepack.html#enabling-the-feature)。之所以是实验性,是因为 Corepack 本身也仍是实验性特性。 + +### `--resolve-engines` + +**🧪 实验性** + +将 `package.json#engines#node` 视为有效的 Node.js 版本文件("dotfile")。例如你有如下 `package.json`: + +```json +{ + "engines": { + "node": ">=20 <21" + } +} +``` + +那么: + +- `fnm install` 会安装 Node.js 发行服务器中满足条件的最新 20.x 版本 +- `fnm use` 会使用你系统中满足条件的最新 20.x 版本;如果没有匹配版本,则提示安装 diff --git a/docs/nightly.zh-CN.md b/docs/nightly.zh-CN.md new file mode 100644 index 000000000..a170e4f21 --- /dev/null +++ b/docs/nightly.zh-CN.md @@ -0,0 +1,26 @@ +# 使用 Node nightly 构建 + +fnm 没有提供用于安装 nightly 构建的快捷方式,但你可以通过 `--node-dist-mirror` 参数手动指定一个 "dist mirror" 来实现。 + +## 使用示例 + +下面是安装 Node 23 的示例。 + +先运行以下命令获取可用版本列表: + + fnm --node-dist-mirror https://nodejs.org/download/nightly/ ls-remote + +使用并安装 nightly 版本: + + fnm --node-dist-mirror https://nodejs.org/download/nightly/ use 23 + # 或 + fnm --node-dist-mirror https://nodejs.org/download/nightly/ use v23.0.0-nightly202407253de7a4c374 + +安装完成后,你就可以在版本列表中看到它: + + fnm ls + +并且之后可以不再传 `--node-dist-mirror` 参数直接使用: + + fnm use 23 +