n
– 交互式管理您的 Node.js 版本Node.js 版本管理:没有子 shell、没有配置文件设置、没有复杂的 API,只有简单的.
n
– 交互式管理您的 Node.js 版本n
在 macOS、Linux(包括适用于 Linux 的 Windows 子系统)以及各种其他类 UNIX 系统上受支持。它被编写为 BASH 脚本,但不要求您使用 BASH 作为命令 shell。
n
不适用于 Microsoft Windows 上的本机 shell(如 PowerShell)、Windows BASH 的 Git 或 Cygwin DLL。
如果您已经安装了 Node.js,安装n
的一个简单方法是使用npm
:
npm install -g n
运行n
时使用的默认根位置是/usr/local
,普通用户没有写入权限。使用 npm 安装全局模块时,您可能会遇到同样的权限错误,如上面的命令。您有三个主要选择:
n
使用您有写入权限的自定义位置(请参阅N_PREFIX
)sudo
放在命令前面以超级用户身份运行它n
在子目录n/versions
中缓存 Node.js 版本。活动的Node.js 版本安装在子目录bin
、 include
、 lib
和share
中。
获取系统目录的所有权(选项 1):
# make cache folder (if missing) and take ownership
sudo mkdir -p /usr/local/n
sudo chown -R $(whoami) /usr/local/n
# make sure the required folders exist (safe to execute even if they already exist)
sudo mkdir -p /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share
# take ownership of Node.js install destination folders
sudo chown -R $(whoami) /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share
如果npm
尚不可用,引导安装的一种方法是直接下载并运行n
。要安装 Node.js 的lts
版本:
curl -fsSL https://raw.githubusercontent.com/tj/n/master/bin/n | bash -s install lts
# If you want n installed, you can use npm now.
npm install -g n
如果您不需要n
本身更新的支持,您可以直接保存下载:
curl -fsSL -o /usr/local/bin/n https://raw.githubusercontent.com/tj/n/master/bin/n
chmod 0755 /usr/local/bin/n
n install lts
在装有 Homebrew 的 macOS 上,您可以安装 n 公式。
brew install n
或者在带有 MacPorts 的 macOS 上,您可以安装 n 端口:
port install n
在 Linux 和 macOS 上,n-install 允许直接从 GitHub 安装;例如:
curl -L https://bit.ly/n-install | bash
n-install 将PREFIX
和N_PREFIX
设置为$HOME/n
,将n
安装到$HOME/n/bin
,修改支持的 shell 的初始化文件以导出N_PREFIX
并将$HOME/n/bin
添加到PATH
,并安装最新的LTS Node.js 版本。
因此, n
本身及其管理的所有 Node.js 版本都托管在一个可选的可配置目录中,稍后您可以使用包含的n-uninstall
脚本将其删除。 n-update
将n
自身更新为最新版本。有关更多详细信息,请参阅 n-install 存储库。
从以前安装的 Node.js 更改到其他位置可能需要一些额外的步骤。请参阅更改节点位置的文档,了解从使用 Homebrew 切换到使用n
管理 Node.js 的演练示例。
如果安装节点后您看到“已安装”和“活动”位置不同,则说明多个版本存在问题:
% n lts
copying : node/20.12.2
installed : v20.12.2 to /usr/local/bin/node
active : v21.7.3 at /opt/homebrew/bin/node
只需执行n <version>
即可下载并安装 Node.js 的版本。如果已下载<version>
, n
将从其缓存中安装。
n 10.16.0
n lts
单独执行n
以查看下载的版本,并安装所选版本。
$ n
node/4.9.1
ο node/8.11.3
node/10.15.0
Use up/down arrow keys to select a version, return key to install, d to delete, q to quit
(您还可以使用j和k选择下一个或上一个版本,而不是使用箭头或ctrl+n和ctrl+p 。)
如果活动节点版本在安装后没有更改,请尝试打开新的 shell,以防看到过时的版本。
有多种方法可以指定n
命令的目标 Node.js 版本。大多数命令使用最新的匹配版本, n ls-remote
列出多个匹配版本。
数字版本号可以是完整的或不完整的,带有可选的前导v
。
4.9.1
8
: 8.xy 版本v6.1
:6.1.x 版本有两个特别有用的版本的标签:
lts
:最新的长期支持官方版本latest
, current
:最新的官方版本有一个auto
标签可以从当前目录或任何父目录中的文件中读取目标版本。 n
按顺序查找:
.n-node-version
:单行版本。自定义为n
。.node-version
:单行版本。由多个工具使用:node-version-usage.nvmrc
:单行版本。由nvm
使用。engine
。 engine
标签查找package.json
文件并读取engines
字段以确定兼容的 Node.js。需要安装版本的jq
或node
,并使用npx semver
解析复杂的范围。
支持指定的发布流:
argon
、 boron
、 carbon
:LTS 发布流的代号可以使用这些 Node.js 支持别名,但只需解析为最新的匹配版本:
active
、 lts_active
、 lts_latest
、 lts
、 current
、 supported
最后一个版本形式用于使用远程下载文件夹的名称(可选地后跟完整或不完整版本)来指定其他可用版本。
nightly
test/v11.0.0-test20180528
rc/10
删除一些缓存版本:
n rm 0.9.4 v0.10.0
删除除已安装版本之外的所有缓存版本:
n prune
删除已安装的 Node.js(不影响缓存版本)。这对于恢复到节点的系统版本(如果位于不同的位置),或者如果您不再希望使用节点和 npm,或者切换到不同的管理方式非常有用。
n uninstall
有三个命令可直接使用您下载的 Node.js 版本,而无需重新安装。
您可以显示下载的node
版本的路径:
$ n which 6.14.3
/usr/local/n/versions/6.14.3/bin/node
或者使用n run
命令运行下载的node
版本:
n run 8.11.3 --debug some.js
或者执行修改PATH
的命令,以便node
和npm
将来自下载的 Node.js 版本。 (注意: npm
以这种方式运行将使用目标节点版本文件夹中的全局 node_modules。)
n exec 10 my-script --fast test
n exec lts zsh
Node.js 安装通常还包括npm
、 npx
和corepack
,但您可能希望使用--preserve
保留当前(尤其是较新的)版本:
$ npm install -g npm@latest
...
$ npm --version
6.13.7
# Node.js 8.17.0 includes (older) npm 6.13.4
$ n -p 8
installed : v8.17.0
$ npm --version
6.13.7
您可以通过将环境变量设置为非空字符串来将其设置为默认值。 npm
和corepack
有单独的环境变量:
export N_PRESERVE_NPM=1
export N_PRESERVE_COREPACK=1
无论环境变量如何,您都可以明确获得所需的行为:
n --preserve nightly
n --no-preserve latest
命令行帮助可以从n --help
获得。
列出可供下载的匹配远程版本:
n ls-remote lts
n ls-remote latest
n lsr 10
n --all lsr
列出缓存中下载的版本:
n ls
下载版本到缓存:
n download 22
使用n
在没有互联网可用的情况下访问缓存版本(已下载)。
n --offline 12
使用--cleanup
安装后删除缓存版本。这对于一次性安装特别有用,例如在 Docker 容器中。
curl -fsSL https://raw.githubusercontent.com/tj/n/master/bin/n | bash -s install --cleanup lts
通常,如果目标版本尚未在缓存中,则n run
、 n exec
和n which
将会失败。您可以添加--download
以使用缓存(如果可用)或根据需要下载:
n --download run 18.3 my-script.js
显示诊断有助于解决问题:
n doctor
如果您想使用与默认 https://nodejs.org/dist/ 具有相同布局的不同 Node.js 镜像,您可以定义N_NODE_MIRROR
。
一个例子是中国用户可以定义:
export N_NODE_MIRROR=https://npmmirror.com/mirrors/node
另一个例子是 Node.js 非官方构建项目,该项目提供了一些未正式提供的平台的下载,例如 armv6l (Raspberry Pi) 和 32 位 x86。
export N_NODE_MIRROR=https://unofficial-builds.nodejs.org/download/release
如果n
没有自动检测到,您可能需要显式指定架构,例如在 Alpine 上使用musl
libc
:
export N_NODE_MIRROR=https://unofficial-builds.nodejs.org/download/release
apk add bash curl libstdc++
n --arch x64-musl install lts
如果自定义镜像需要身份验证,您可以将 url 编码的用户名和密码添加到 URL 中。例如
export N_NODE_MIRROR=https://encoded-username:encoded-password@host:port/path
还有N_NODE_DOWNLOAD_MIRROR
用于与默认 https://nodejs.org/download 具有相同布局的不同镜像。
默认情况下, n
选择与您的系统架构匹配的二进制文件。例如,在 64 位系统上, n
将下载 64 位二进制文件。
在配备 Apple 芯片的 Mac 上:
n
默认为本地运行的 arm64 二进制文件n
默认为在 Rosetta 2 中运行的 x64 二进制文件您可以使用-a
或--arch
选项覆盖默认体系结构。
例如,使用 x64 二进制文件重新安装最新版本的 Node.js:
n rm current
n --arch x64 current
默认情况下, n
命令下载并安装到/usr/local
,但您可以通过定义N_PREFIX
来覆盖此位置。要将位置更改为$HOME/.n
,请将如下行添加到 shell 初始化文件中:
export N_PREFIX=$HOME/.n
export PATH=$N_PREFIX/bin:$PATH
如果您想将下载存储在不同的位置,请使用N_CACHE_PREFIX
。这不会影响活动节点版本的安装位置。
如果系统上的 tar 可能支持 xz 解压缩, n
默认使用 xz 压缩的 Node.js tarball 进行下载。您可以通过将环境变量设置为零或非零来覆盖自动选择:
export N_USE_XZ=0 # to disable
export N_USE_XZ=1 # to enable
无论环境变量如何,您都可以明确获得所需的行为:
n install --use-xz nightly
n install --no-use-xz latest
简而言之:
N_NODE_MIRROR
:参见自定义源N_NODE_DOWNLOAD_MIRROR
:参见自定义源N_MAX_REMOTE_MATCHES
更改默认ls-remote
最多 20 个匹配版本N_PRESERVE_NPM
:请参阅保留 npmN_PRESERVE_COREPACK
:请参阅保留 npm n
下载预构建的 Node.js 包并安装到单个前缀(例如/usr/local
)。这将覆盖以前的版本。此位置中的bin
文件夹应该位于您的PATH
中(例如/usr/local/bin
)。
下载的内容保存在缓存文件夹中,以供重新安装使用。使用n which
和n run
和n exec
也可以下载有限的用途。
全局npm
包不会因安装而更改,但npm
本身除外,它是 Node.js 安装的一部分。