简介
关于
安装和更新
附加说明
Linux 上的故障排除
macOS 上的故障排除
安西布尔
安装和更新脚本
验证安装
重要提示
git 安装
手动安装
手动升级
用法
在带有.nvmrc
文件的目录中自动调用nvm use
巴什
桀骜
鱼
将授权标头传递给镜像
保留自定义颜色
抑制彩色输出
长期支持
安装时迁移全局包
安装时文件中的默认全局包
io.js
节点系统版本
列出版本
设置自定义颜色
恢复路径
设置默认节点版本
使用节点二进制文件的镜像
.nvmrc
更深入的 Shell 集成
运行测试
环境变量
重击完成
用法
兼容性问题
在 Alpine Linux 上安装 nvm
阿尔派 Linux 3.13+
高山 Linux 3.5 - 3.12
卸载/删除
手动卸载
Docker 开发环境
问题
macOS 故障排除
WSL 故障排除
维护者
项目支持
企业支持
执照
版权声明
nvm
允许您通过命令行快速安装和使用不同版本的node。
例子:
$ nvm 使用 16 现在使用节点 v16.9.1 (npm v7.21.1) $ 节点-v v16.9.1 $ nvm 使用 14 现在使用节点 v14.18.0 (npm v6.14.15) $ 节点-v v14.18.0 $ nvm安装12 现在使用节点 v12.22.6 (npm v6.14.5) $ 节点-v v12.22.6
就这么简单!
nvm 是 Node.js 的版本管理器,设计为按用户安装并按 shell 调用。 nvm
可在任何兼容 POSIX 的 shell(sh、dash、ksh、zsh、bash)上运行,特别是在以下平台上:unix、macOS 和 windows WSL。
要安装或更新nvm,您应该运行安装脚本。为此,您可以手动下载并运行脚本,或者使用以下 cURL 或 Wget 命令:
卷曲 -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh |巴什
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh |巴什
运行上述任一命令都会下载脚本并运行它。该脚本将 nvm 存储库克隆到~/.nvm
,并尝试将下面代码片段中的源行添加到正确的配置文件( ~/.bash_profile
、 ~/.zshrc
、 ~/.profile
或~/.bashrc
) 。
导出 NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"[ -s "$ NVM_DIR/nvm.sh"] && . "$NVM_DIR/nvm.sh" # 这会加载 nvm
如果环境变量$XDG_CONFIG_HOME
存在,它将把nvm
文件放置在那里。
您可以将--no-use
添加到上述脚本的末尾(... nvm.sh --no-use
)以推迟使用nvm
,直到您手动use
它。
您可以使用NVM_SOURCE
、 NVM_DIR
、 PROFILE
和NODE_VERSION
变量自定义安装源、目录、配置文件和版本。例如: curl ... | NVM_DIR="path/to/nvm"
。确保NVM_DIR
不包含尾部斜杠。
安装程序可以使用git
、 curl
或wget
下载nvm
(以可用者为准)。
您可以通过在运行install.sh
脚本之前设置PROFILE=/dev/null
来指示安装程序不要编辑您的 shell 配置(例如,如果您已经通过 zsh nvm 插件获得完成)。下面是一个示例单行命令: PROFILE=/dev/null bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash'
在 Linux 上,运行安装脚本后,如果收到nvm: command not found
或在键入command -v nvm
后看不到来自终端的任何反馈,只需关闭当前终端,打开一个新终端,然后再次尝试验证即可。或者,您可以在命令行上针对不同的 shell 运行以下命令:
bash : source ~/.bashrc
zsh : source ~/.zshrc
克什: . ~/.profile
这些应该会使用nvm
命令。
从OS X 10.9开始,Xcode命令行工具预设了/usr/bin/git
,这意味着我们无法正确检测Git是否安装。在运行安装脚本之前,您需要手动安装Xcode命令行工具,否则会失败。 (参见#1782)
如果运行安装脚本后收到nvm: command not found
,原因可能是以下之一:
从 macOS 10.15 开始,默认 shell 是zsh
,nvm 会查找.zshrc
进行更新,默认情况下不安装。使用touch ~/.zshrc
创建一个并再次运行安装脚本。
如果您使用 bash(以前的默认 shell),您的系统可能没有设置命令的.bash_profile
或.bashrc
文件。使用touch ~/.bash_profile
或touch ~/.bashrc
创建其中之一,然后再次运行安装脚本。然后,运行. ~/.bash_profile
或. ~/.bashrc
以获取nvm
命令。
您以前使用过bash
,但安装了zsh
。您需要手动将这些行添加到~/.zshrc
并运行. ~/.zshrc
。
您可能需要重新启动终端实例或运行. ~/.nvm/nvm.sh
。重新启动终端/打开新选项卡/窗口,或运行 source 命令将加载命令和新配置。
如果上述方法没有帮助,您可能需要重新启动终端实例。尝试在终端中打开一个新选项卡/窗口并重试。
如果上述方法不能解决问题,您可以尝试以下操作:
如果您使用 bash,则可能是您的.bash_profile
(或~/.profile
)没有正确获取~/.bashrc
。您可以通过添加source ~/
或按照下面的下一步操作来解决此问题。
尝试将安装部分中的片段添加到您常用的配置文件( ~/.bash_profile
、 ~/.zshrc
、 ~/.profile
或~/.bashrc
)中,该片段会找到正确的 nvm 目录并将 nvm 加载。
有关此问题和可能的解决方法的更多信息,请参阅此处
注意对于配备 Apple Silicon 芯片的 Mac,node 自 v16.0.0 起开始提供arm64 arch Darwin 软件包,并自 v14.17.0 起从源代码编译时提供实验性的arm64支持。如果您在使用nvm
安装节点时遇到问题,您可能需要更新到这些版本之一或更高版本。
您可以使用任务:
-名称:安装nvm ansible.builtin.shell:>curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash 参数:创建:“{{ ansible_env.HOME }}/.nvm/nvm.sh”
要验证 nvm 是否已安装,请执行以下操作:
命令-v nvm
如果安装成功,应该输出nvm
。请注意, which nvm
不起作用,因为nvm
是一个源 shell 函数,而不是可执行二进制文件。
注意:在 Linux 上,运行安装脚本后,如果您收到nvm: command not found
或在键入command -v nvm
后看不到来自终端的任何反馈,只需关闭当前终端,打开一个新终端,然后再次尝试验证即可。
如果您运行的系统没有可用的预打包二进制文件,这意味着您要从其源代码安装 Node 或 io.js,则需要确保您的系统具有 C++ 编译器。对于 OS X,Xcode 可以工作,对于基于 Debian/Ubuntu 的 GNU/Linux, build-essential
和libssl-dev
软件包可以工作。
注意: nvm
在某些情况下也支持 Windows。它应该通过 WSL(适用于 Linux 的 Windows 子系统)运行,具体取决于 WSL 的版本。它还应该与 GitBash (MSYS) 或 Cygwin 一起使用。否则,对于 Windows,存在一些替代方案,我们既不支持也不开发:
nvm-windows
节点主义者
内华达
注意: nvm
也不支持 Fish(参见#303)。存在替代方案,但我们既不支持也不开发:
bass 允许您在 Fish shell 中使用为 Bash 编写的实用程序
fast-nvm-fish 仅适用于版本号(不适用于别名),但不会显着减慢您的 shell 启动速度
Oh My Fish 的 plugin-nvm 插件,使 nvm 及其补全在 Fish shell 中可用
fnm - 基于渔夫的 Fish 版本管理器
fish-nvm - 鱼的 nvm 包装器,延迟采购 nvm 直到实际使用。
注意:我们在 FreeBSD 方面仍然存在一些问题,因为 FreeBSD 没有官方的预构建二进制文件,并且从源代码构建可能需要补丁;请参阅问题票:
[#900] [Bug] FreeBSD 上的节点可能需要修补
Node.js/节点#3716
注意:在 OS X 上,如果您没有安装 Xcode 并且不想下载 ~4.3GB 文件,您可以安装Command Line Tools
。您可以查看这篇博客文章,了解如何做到这一点:
如何在 OS X Mavericks 和 Yosemite 中安装命令行工具(无需 Xcode)
注意:在 OS X 上,如果您已经安装了“系统”节点并且想要全局安装模块,请记住:
使用nvm
时,不需要sudo
使用npm -g
全局安装模块,因此不要执行sudo npm install -g grunt
,而是执行npm install -g grunt
如果您有~/.npmrc
文件,请确保它不包含任何prefix
设置(与nvm
不兼容)
您可以(但不应该?)保留之前的“系统”节点安装,但nvm
将仅对您的用户帐户(用于安装 nvm 的帐户)可用。这可能会导致版本不匹配,因为其他用户将使用/usr/local/lib/node_modules/*
VS 您的用户帐户使用~/.nvm/versions/node/vX.XX/lib/node_modules/*
不支持自制安装。如果您对自制安装的nvm
有问题,请在提交问题之前, brew uninstall
并按照以下说明进行安装。
注意:如果您使用zsh
您可以轻松地将nvm
安装为 zsh 插件。安装zsh-nvm
并运行nvm upgrade
进行升级。
注意: v1.7 之前的 Git 版本可能会面临通过 https 协议从 GitHub 克隆nvm
源的问题,v1.6 之前的 git 也有不同的行为,v1.17.10 之前的 git 无法克隆标签,所以最小所需的 git 版本是 v1.7.10。如果您对我们这里提到的问题感兴趣,请参阅 GitHub 的 HTTPS 克隆错误文章。
如果您安装了git
(需要 git v1.7.10+):
将此存储库克隆到您的用户配置文件的根目录中
从任何地方cd ~/
然后git clone https://github.com/nvm-sh/nvm.git .nvm
cd ~/.nvm
并使用git checkout v0.40.1
查看最新版本
通过从 shell 获取nvm
来激活它: . ./nvm.sh
现在将这些行添加到您的~/.bashrc
、 ~/.profile
或~/.zshrc
文件中,以便在登录时自动获取它:(您可能需要添加到以上多个文件中)
导出 NVM_DIR="$HOME/.nvm"[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # 这会加载 nvm[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion" # 这会加载 nvm bash_completion
对于完全手动安装,请执行以下行,首先将nvm
存储库克隆到$HOME/.nvm
中,然后加载nvm
:
导出 NVM_DIR="$HOME/.nvm" && ( git 克隆 https://github.com/nvm-sh/nvm.git "$NVM_DIR" cd "$NVM_DIR" git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`) && . “$NVM_DIR/nvm.sh”
现在将这些行添加到您的~/.bashrc
、 ~/.profile
或~/.zshrc
文件中,以便在登录时自动获取它:(您可能需要添加到以上多个文件中)
导出 NVM_DIR="$HOME/.nvm"[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # 这会加载 nvm[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion" # 这会加载 nvm bash_completion
对于使用git
手动升级(需要 git v1.7.10+):
更改为$NVM_DIR
下拉最新的更改
查看最新版本
激活新版本
(cd“$NVM_DIR” git fetch --标签原点 git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`) && . “$NVM_DIR/nvm.sh”
要下载、编译和安装最新版本的节点,请执行以下操作:
nvm install node #“node”是最新版本的别名
要安装特定版本的节点:
nvm install 14.7.0 # 或 16.3.0、12.22.1 等
设置别名:
nvm 别名 my_alias v14.4.0
确保您的别名不包含任何空格或斜杠。
安装的第一个版本将成为默认版本。新的 shell 将以默认版本的节点启动(例如, nvm alias default
)。
您可以使用ls-remote
列出可用版本:
nvm ls 远程
然后在任何新 shell 中只需使用已安装的版本:
nvm使用节点
或者你可以直接运行它:
nvm 运行节点 --version
或者,您可以使用所需版本的节点在子 shell 中运行任意命令:
nvm exec 4.2 节点 --version
您还可以获取可执行文件的安装路径:
nvm 12.22
您可以使用以下特殊默认别名来代替“14.7”或“16.3”或“12.22.1”等版本指针: nvm install
、 nvm use
、 nvm run
、 nvm exec
、 nvm which
等:
node
:这将安装最新版本的node
iojs
:这会安装最新版本的io.js
stable
:此别名已弃用,仅真正适用于node
v0.12
及更早版本。目前,这是node
的别名。
unstable
:此别名指向node
v0.11
- 最后一个“不稳定”节点版本,自 1.0 之后,所有节点版本都是稳定的。 (在 SemVer 中,版本传达的是破坏性,而不是稳定性)。
Node 有长期支持 (LTS) 计划。例如,您可以在别名和.nvmrc
文件中引用 LTS 版本,并使用符号lts/*
表示最新的 LTS,并使用lts/argon
表示来自“argon”行的 LTS 版本。 。此外,以下命令支持 LTS 参数:
nvm install --lts
/ nvm install --lts=argon
/ nvm install 'lts/*'
/ nvm install lts/argon
nvm uninstall --lts
/ nvm uninstall --lts=argon
/ nvm uninstall 'lts/*'
/ nvm uninstall lts/argon
nvm use --lts
/ nvm use --lts=argon
/ nvm use 'lts/*'
/ nvm use lts/argon
nvm exec --lts
/ nvm exec --lts=argon
/ nvm exec 'lts/*'
/ nvm exec lts/argon
nvm run --lts
/ nvm run --lts=argon
/ nvm run 'lts/*'
/ nvm run lts/argon
nvm ls-remote --lts
/ nvm ls-remote --lts=argon
nvm ls-remote 'lts/*'
/ nvm ls-remote lts/argon
nvm version-remote --lts
/ nvm version-remote --lts=argon
/ nvm version-remote 'lts/*'
/ nvm version-remote lts/argon
每当您的nvm
本地副本连接到 https://nodejs.org 时,它都会为所有可用的 LTS 线路重新创建适当的本地别名。这些别名(存储在$NVM_DIR/alias/lts
下)由nvm
管理,您不应修改、删除或创建这些文件 - 预计您的更改将被撤消,并预计干预这些文件可能会导致错误不被支持。
要获取最新的 LTS 版本的节点并迁移现有已安装的软件包,请使用
nvm install --reinstall-packages-from=current 'lts/*'
如果您想安装新版本的 Node.js 并从以前的版本迁移 npm 包:
nvm install --reinstall-packages-from=node 节点
这将首先使用“nvm version node”来识别您要从中迁移包的当前版本。然后它解析要从远程服务器安装的新版本并安装它。最后,它运行“nvm reinstall-packages”将 npm 软件包从先前版本的 Node 重新安装到新版本。
您还可以从特定版本的 Node 安装和迁移 npm 包,如下所示:
nvm install --reinstall-packages-from=5 6 nvm install --reinstall-packages-from=iojs v4.2
请注意,明确重新安装软件包不会更新 npm 版本- 这是为了确保 npm 不会意外升级到新节点版本的损坏版本。
要同时更新 npm,请添加--latest-npm
标志,如下所示:
nvm install --reinstall-packages-from=default --latest-npm 'lts/*'
或者,您可以随时运行以下命令来获取当前节点版本上最新支持的 npm 版本:
nvm 安装最新 npm
如果您已经收到“npm 不支持 Node.js”的错误,则需要 (1) 恢复到以前的 Node 版本( nvm ls
& nvm use
),(2)删除新创建的节点版本( nvm uninstall
),然后(3)使用--latest-npm
标志重新运行nvm install
。
如果您有一份每次安装新版本时想要安装的默认软件包列表,我们也支持这一点——只需将软件包名称(每行一个)添加到文件$NVM_DIR/default-packages
中即可。您可以在命令行上添加 npm 接受的任何内容作为包参数。
# $NVM_DIR/default-packagesrimraf 对象检查@1.0.2 史蒂夫毛/左垫
如果你想安装 io.js:
nvm安装iojs
如果您想安装新版本的 io.js 并从以前的版本迁移 npm 包:
nvm install --reinstall-packages-from=iojs iojs
在 Node 中迁移 npm 包所提到的相同指南也适用于 io.js。
如果你想使用系统安装版本的node,你可以使用特殊的默认别名“system”:
nvm使用系统 nvm运行系统--版本
如果您想查看安装的版本:
非易失性LS
如果您想查看可以安装哪些版本:
nvm ls 远程
您可以设置五种颜色用于显示版本和别名信息。这些颜色替换默认颜色。初始颜色为:gbyre
颜色代码:
r/R = red / bold red g/G = green / bold green b/B = blue / bold blue c/C = cyan / bold cyan m/M = magenta / bold magenta y/Y = yellow / bold yellow k/K = black / bold black e/W = light grey / white
nvm 设置颜色 rgBcm
如果您希望自定义颜色在终止 shell 后保留,请在 shell 配置文件中导出NVM_COLORS
变量。例如,如果您想使用青色、洋红色、绿色、粗红色和粗黄色,请添加以下行:
导出 NVM_COLORS='cmgRY'
nvm help (or -h or --help)
、 nvm ls
、 nvm ls-remote
和nvm alias
通常会生成彩色输出。您可以使用--no-colors
选项禁用颜色(或通过设置环境变量TERM=dumb
):
nvm ls --无颜色 nvm帮助--无颜色 术语=哑nvm ls
要恢复您的 PATH,您可以停用它:
nvm 停用
要设置在任何新 shell 中使用的默认 Node 版本,请使用别名“default”:
nvm alias default node # 这是指最新安装的node版本nvm alias default 18 # 这是指最新安装的v18.x版本的nodenvm alias default 18.12 # 这是指最新安装的v18.12.x版本的node
要使用节点二进制文件的镜像,请设置$NVM_NODEJS_ORG_MIRROR
:
导出 NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist nvm安装节点 NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist nvm 安装 4.2
要使用 io.js 二进制文件的镜像,请设置$NVM_IOJS_ORG_MIRROR
:
导出 NVM_IOJS_ORG_MIRROR=https://iojs.org/dist nvm安装iojs-v1.0.3 NVM_IOJS_ORG_MIRROR=https://iojs.org/dist nvm 安装 iojs-v1.0.3
默认情况下, nvm use
不会创建“当前”符号链接。将$NVM_SYMLINK_CURRENT
设置为“true”以启用此行为,这有时对 IDE 很有用。请注意,在启用此环境变量的情况下在多个 shell 选项卡中使用nvm
可能会导致竞争条件。
要将授权标头传递到镜像 URL,请设置$NVM_AUTH_HEADER
NVM_AUTH_HEADER="承载秘密令牌" nvm 安装节点
您可以在项目根目录(或任何父目录)中创建一个包含节点版本号(或nvm
理解的任何其他字符串;有关详细信息,请参阅nvm --help
) .nvmrc
文件。之后, nvm use
、 nvm install
、 nvm exec
、 nvm run
和nvm which
将使用.nvmrc
文件中指定的版本(如果命令行上未提供版本)。
例如,要使 nvm 默认为当前目录的最新 5.9 版本、最新 LTS 版本或最新节点版本:
$回显“5.9”> .nvmrc $ echo "lts/*" > .nvmrc # 默认为最新的 LTS 版本$ echo "node" > .nvmrc # 默认为最新版本
[注意,这些示例假定echo
是符合 POSIX 标准的 shell 版本。如果您使用 Windows cmd
开发环境,例如.nvmrc
文件用于配置远程 Linux 部署,那么请记住, "
”将被复制,从而导致无效文件。请将其删除。]
然后当你运行 nvm 时使用:
$ nvm 使用 找到版本 <5.9> 的“/path/to/project/.nvmrc”,现在使用节点 v5.9.1 (npm v3.7.3)
运行 nvm install 也会切换到正确的版本,但如果尚未安装正确的节点版本,它会为您安装。
$ nvm安装 找到版本 <5.9> 的“/path/to/project/.nvmrc”正在下载并安装节点 v5.9.1... 正在下载 https://nodejs.org/dist/v5.9.1/node-v5.9.1-linux-x64.tar.xz...#################### #################################################### ############### 100.0%用sha256sum计算校验和 校验和匹配!现在使用节点 v5.9.1 (npm v3.7.3)
nvm use
等。等人。将从当前目录向上遍历目录结构查找.nvmrc
文件。换句话说,运行nvm use
et 。等人。在具有.nvmrc
的目录的任何子目录中都会导致使用该.nvmrc
。
.nvmrc
文件的内容必须恰好包含一个
(如nvm --help
所描述),后跟一个换行符。 .nvmrc
文件也可能有注释。注释分隔符是#
,它及其后面的任何文本,以及空行、前导和尾随空格,在解析时都将被忽略。
使用=
键/值对也被允许和忽略,但保留供将来使用,并且可能会在将来导致验证错误。
运行npx nvmrc
以验证.nvmrc
文件。如果该工具的结果与 nvm 不一致,则其中一个工具存在错误 - 请提出问题。
您可以使用avn
深度集成到 shell 中,并在更改目录时自动调用nvm
。 nvm
维护者不支持avn
。请向avn
团队报告问题。
您还可以使用nvshim
填充node
、 npm
和npx
bin,以自动使用当前目录中的nvm
配置。 nvshim
不受nvm
维护者支持。请向nvshim
团队报告问题。
如果您更喜欢轻量级的解决方案,以下食谱是由nvm
用户贡献的。它们不受nvm
维护者的支持。然而,我们正在接受更多示例的拉取请求。
.nvmrc
文件的目录中自动调用nvm use
在您的配置文件( ~/.bash_profile
、 ~/.zshrc
、 ~/.profile
或~/.bashrc
)中,每当您进入新目录时,将以下内容添加到nvm use
中:
将以下内容放在$HOME/.bashrc
的末尾:
cdnvm() { 命令 cd "$@" ||返回 $? nvm_path="$(nvm_find_up .nvmrc | command tr -d 'n')" # 如果没有 .nvmrc 文件,则使用默认的 nvm 版本 if [[ ! $nvm_path = *[^[:空格:]]* ]];然后声明default_version default_version="$(nvm version default)" # 如果没有默认版本,请将其设置为 `node` # 这将使用您计算机上的最新版本 if [ $default_version = 'N/A' ];然后 nvm 别名默认节点 default_version=$(nvm version default) fi # 如果当前版本不是默认版本,则设置为使用默认版本 if [ "$(nvm current)" != "${default_version}" ];然后 nvm 使用默认 fi elif [[ -s "${nvm_path}/.nvmrc" && -r "${nvm_path}/.nvmrc" ]];然后声明nvm_version nvm_version=$(<"${nvm_path}"/.nvmrc) 声明 local_resolved_nvm_version # `nvm ls` 将检查所有本地可用的版本 # 如果有多个匹配版本,则取最新的版本 # 删除 `->` 和 ` *` 字符和空格 # 如果未找到本地版本,`locally_resolved_nvm_version` 将为 `N/A` local_resolved_nvm_version=$(nvm ls --no-colors "${nvm_version}" | command tail -1 | command tr -d '->*' | command tr -d '[:space:]') # 如果是尚未安装,请安装 # `nvm install` 将隐式使用新安装的版本 if [ "${locally_resolved_nvm_version}" = 'N/A' ];然后 nvm 安装“${nvm_version}”; elif [ "$(nvm 当前)" != "${locally_resolved_nvm_version}" ];然后 nvm 使用“${nvm_version}”; fi fi}别名 cd='cdnvm'cdnvm "$PWD" ||出口
此别名将从当前目录“向上”搜索,以检测.nvmrc
文件。如果找到它,它将切换到该版本;如果没有,它将使用默认版本。
当找到.nvmrc
时,此 shell 函数将安装(如果需要),并且nvm use
指定的 Node 版本,否则nvm use default
。
将其放入$HOME/.zshrc
中,以便在您进入包含.nvmrc
文件的目录时自动调用nvm use
,该文件中的字符串告诉 nvm 要use
哪个节点:
# 将其放在 nvm 初始化之后!autoload -U add-zsh-hookload-nvmrc() { local nvmrc_path nvmrc_path="$(nvm_find_nvmrc)" if [ -n "$nvmrc_path" ];然后是本地nvmrc_node_version nvmrc_node_version=$(nvm 版本 "$(cat "${nvmrc_path}")") if [ "$nvmrc_node_version" = "N/A" ];然后 nvm install elif [ "$nvmrc_node_version" != "$(nvm 版本)" ];然后 nvm use fi elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm 版本)" != "$(nvm 版本默认值)" ];然后 echo“恢复到 nvm 默认版本” nvm 使用默认 fi} 添加 zsh-hook chpwd 加载 nvmrc 加载nvmrc
这需要您安装低音。
# ~/.config/fish/functions/nvm.fishfunction nvm 低音源 ~/.nvm/nvm.sh --no-use ';' nvm $argvend# ~/.config/fish/functions/nvm_find_nvmrc.fishfunction nvm_find_nvmrc 低音源 ~/.nvm/nvm.sh --no-use ';' nvm_find_nvmrcend# ~/.config/fish/functions/load_nvm.fishfunction load_nvm --on-variable="PWD" set -l default_node_version (nvm版本默认) set -l node_version (nvm版本) set -l nvmrc_path (nvm_find_nvmrc) if test -n "$nvmrc_path" set -l nvmrc_node_version (nvm 版本 (cat $nvmrc_path)) 如果测试 "$nvmrc_node_version" = "N/A" nvm install (cat $nvmrc_path) 否则如果测试 "$nvmrc_node_version" != "$node_version" nvm use $nvmrc_node_version end else if test "$node_version" != "$default_node_version" echo "恢复到默认节点版本" nvm use default endend# ~/.config/fish/config.fish# 必须在初始化时调用,否则监听目录切换不会工作负载_nvm > /dev/stderr
测试是用 Urchin 编写的。像这样安装 Urchin(和其他依赖项):
npm install
有慢速测试和快速测试。缓慢的测试会执行诸如安装节点并检查是否使用了正确的版本之类的事情。快速测试会伪造这个来测试别名和卸载等内容。从 nvm git 存储库的根目录,运行快速测试,如下所示:
npm run test/fast
像这样运行缓慢的测试:
npm run test/slow
像这样运行所有测试:
npm test
注意事项:避免在测试运行时运行 nvm。
nvm 公开以下环境变量:
NVM_DIR
- nvm 的安装目录。
NVM_BIN
- 安装节点、npm 和节点活动版本的全局包的位置。
NVM_INC
- 节点的包含文件目录(对于为节点构建 C/C++ 插件很有用)。
NVM_CD_FLAGS
- 用于保持与 zsh 的兼容性。
NVM_RC_VERSION
- .nvmrc 文件的版本(如果正在使用)。
此外,nvm 在更改版本时会修改PATH
以及MANPATH
和NODE_PATH
(如果存在)。
要激活,您需要获取bash_completion
:
[[ -r $NVM_DIR/bash_completion ]] && . $NVM_DIR/bash_completion
将上述源代码行放在您的配置文件( .bashrc
、 .bash_profile
)中 nvm 源代码行的正下方。
NVVM:
$ nvm
选项卡
别名 deactivate install list-remote reinstall-packages uninstall version 缓存执行安装-最新-npm ls 运行卸载版本-远程 当前帮助列表 ls-remote unalias 使用 which
nvm 别名:
$ nvm alias
卡
默认 iojs lts/* lts/argon lts/boron lts/carbon lts/dubnium lts/erbium 节点稳定不稳定
$ nvm alias my_alias
选项卡
v10.22.0 v12.18.3 v14.8.0
nvm使用:
$ nvm use
选项卡
my_alias default v10.22.0 v12.18.3 v14.8.0
nvm卸载:
$ nvm uninstall
选项卡
my_alias default v10.22.0 v12.18.3 v14.8.0
如果设置了一些非默认设置, nvm
会遇到一些问题。 (请参阅#606)已知以下因素会导致问题:
在~/.npmrc
里面:
前缀='一些/路径'
环境变量:
$NPM_CONFIG_PREFIX$PREFIX
外壳设置:
设置-e
为了提供最佳性能(和其他优化),当您运行nvm install X
时,nvm 将下载并安装 Node(和 npm)的预编译二进制文件。 Node 项目编译、测试和托管/提供这些预编译的二进制文件,这些二进制文件是为主流/传统 Linux 发行版(例如 Debian、Ubuntu、CentOS、RedHat 等)构建的。
与主流/传统 Linux 发行版不同,Alpine Linux 基于 BusyBox,这是一个非常紧凑(~5MB)的 Linux 发行版。 BusyBox(以及 Alpine Linux)使用与大多数主流/传统 Linux 发行版不同的 C/C++ 堆栈 - musl。这使得为此类主流/传统构建的二进制程序与 Alpine Linux 不兼容,因此我们不能简单地在 Alpine Linux 上nvm install X
并期望下载的二进制文件能够正确运行 - 如果您这样做,您可能会看到“...不存在”错误尝试一下。
nvm install
有一个-s
标志,它请求 nvm 下载 Node 源并在本地编译。
如果您仍然想要或需要在 Alpine Linux 上安装 nvm,那么您应该能够通过从 Alpine Linux shell 运行以下命令来实现此目的,具体取决于您使用的版本:
apk add -U curl bash ca-证书 openssl ncurses coreutils python3 make gcc g++ libgcc linux-headers grep util-linux binutils findutils 卷曲 -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh |巴什
apk add -U curl bash ca-证书 openssl ncurses coreutils python2 make gcc g++ libgcc linux-headers grep util-linux binutils findutils 卷曲 -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh |巴什
注意:Alpine 3.5 只能安装 NodeJS v6.9.5 及以下版本,Alpine 3.6 只能安装 v6.10.3 及以下版本,Alpine 3.7 安装 v8.9.3 及以下版本,Alpine 3.8 安装 v8.14.0 及以下版本,Alpine 3.9 安装Alpine 3.10 安装 v10.24.1 以下版本,Alpine 3.11 安装 v12.22.6 以下版本,Alpine 3.12 安装 v12.22.12 以下版本,Alpine 3.13 和 3.14 安装 v14.20.0 以下版本,Alpine 3.15 和 3.16 安装版本高达 v16.16.0(这些都是主分支上的版本)。 Alpine 3.5 - 3.12 需要python2
包来构建 NodeJS,因为它们是要构建的旧版本。 Alpine 3.13+ 需要python3
才能成功构建较新的 NodeJS 版本,但如果您需要构建 Alpine 3.5 - 3.15 支持的 Node 版本,则可以将python2
与 Alpine 3.13+ 结合使用,只需指定需要安装的 NodeJS 版本包安装脚本。
Node 项目有一些愿望,但没有具体计划(由于构建、测试和支持的开销)来提供与 Alpine 兼容的二进制文件。
作为一个潜在的替代方案,@mhart(Node 贡献者)预装了一些用于 Alpine Linux 的 Docker 镜像,其中包含 Node 以及可选的 npm。
要手动删除nvm
,请执行以下命令:
首先,使用nvm unload
从终端会话中删除 nvm 命令并删除安装目录:
$ nvm_dir="${NVM_DIR:-~/.nvm}"$ nvm 卸载 $ rm -rf“$nvm_dir”
编辑~/.bashrc
(或其他 shell 资源配置)并删除以下行:
导出 NVM_DIR="$HOME/.nvm"[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # 这会加载 nvm[[ -r $NVM_DIR/bash_completion ]] && . $NVM_DIR/bash_completion
为了方便开发和测试工作,我们提供了一个供开发使用的 Dockerfile,它基于 Ubuntu 18.04 基础镜像,准备了nvm
开发必备且有用的工具,构建环境的 docker 镜像,运行 docker 命令: nvm
存储库的根目录:
$ docker build -t nvm-dev 。
这会将您当前的 nvm 存储库与我们预定义的开发环境打包到名为nvm-dev
docker 镜像中,一旦成功构建,就可以通过docker images
验证您的镜像:
$ docker 图片 存储库标签图像 ID 创建大小 nvm-dev 最新 9ca4c57a97d8 7 天前 650 MB
如果您没有收到错误消息,现在您可以轻松参与:
$ docker run -h nvm-dev -it nvm-dev nvm@nvm-dev:~/.nvm$
请注意,构建镜像大约需要 8 分钟,镜像大小约为 650MB,因此不适合生产使用。
关于docker的更多信息和文档请参考其官网:
https://www.docker.com/
https://docs.docker.com/
如果您尝试安装节点版本但安装失败,请务必运行nvm cache clear
以删除缓存的节点下载,否则您可能会收到如下错误:
curl: (33) HTTP 服务器似乎不支持字节范围。无法恢复。
我的sudo node
在哪里?看看#43
在 Node v0.8.6 版本之后,nvm 尝试从二进制包安装。但在某些系统中,由于共享库不兼容,官方二进制包无法运行。在这种情况下,请使用-s
选项强制从源安装:
nvm安装-s 0.8.6
如果设置default
别名不会在新 shell 中建立节点版本(即nvm current
产生system
),请确保系统的节点PATH
设置在 shell 配置文件中的nvm.sh
源代码行之前(请参阅 #658)
在 vim shell 中找不到 nvm 节点版本
如果您将节点版本设置为系统节点版本nvm use 6.2.1
以外的版本,然后打开 vim 并运行:!node -v
如果您看到系统版本v0.12.7
您应该会看到v6.2.1
。你需要运行:
sudo chmod ugo-x /usr/libexec/path_helper
有关此问题的更多信息,请参阅 dotphiles/dotzsh。
nvm 与 npm 配置“前缀”选项不兼容
可以在此处找到此问题的一些解决方案
还有一种边缘情况会导致此问题,即$HOME
路径与用户主目录的实际名称不匹配。
您必须确保$HOME
中的用户目录名称和您在运行ls /Users/
中看到的用户目录名称的大写方式相同(请参阅此问题)。
要更改用户目录和/或帐户名,请按照此处的说明操作
Homebrew 使 zsh 目录不安全
zsh compinit:不安全的目录,运行 compaudit 获取列表。 忽略不安全目录并继续 [y] 或中止 compinit [n]? y
Homebrew 会导致不安全的目录,例如/usr/local/share/zsh/site-functions
和/usr/local/share/zsh
。这不是一个nvm
问题 - 这是一个自制问题。请参阅此处以获取与该问题相关的一些解决方案。
配备 Apple Silicon 芯片的 Mac
Node.js v15.3 中添加了对 Apple Silicon 芯片架构的实验性支持,v16.0 中添加了全面支持。因此,如果您尝试像往常一样安装旧版本的 Node,您可能会在安装 Node 时遇到编译错误,或者在运行代码时遇到内存不足错误。
因此,如果您想在 Apple Silicon Mac 上运行 v16.0 之前的版本,最好编译针对x86_64
Intel 架构的节点,以便 Rosetta 2 可以将x86_64
处理器指令转换为基于 ARM 的 Apple Silicon 指令。您需要执行以下操作:
安装 Rosetta(如果您尚未安装)
$ softwareupdate --install-rosetta
您可能想知道,“我的 Apple Silicon Mac 如何知道将 Rosetta 用于为 Intel 芯片编译的节点版本?”。如果可执行文件仅包含 Intel 指令,macOS 将自动使用 Rosetta 来翻译指令。
打开使用 Rosetta 运行的 shell
$ 拱门-x86_64 zsh
注意:同样的事情也可以通过在 Finder 中找到终端或 iTerm 应用程序,右键单击,选择“获取信息”,然后选中标有“使用 Rosetta 打开”的框来完成。
注意:此终端会话现在正在zsh
中运行。如果zsh
不是您通常使用的 shell,则nvm
可能不会像您通常的 shell 通过点文件那样自动source
化。如果是这种情况,请确保来源nvm
。
$源“${NVM_DIR}/nvm.sh”
安装您感兴趣的任何旧版本的节点。让我们使用 12.22.1 作为示例。这将获取节点源代码并进行编译,这将需要几分钟的时间。
$ nvm install v12.22.1 --shared-zlib
注意:您可能好奇为什么包含--shared-zlib
。 Apple 系统clang
编译器的最新版本存在一个错误。如果您的系统上安装了这些损坏的版本之一,即使您没有包含--shared-zlib
标志,上述步骤也可能仍然会成功。但是,稍后,当您尝试使用旧版本的 Node.js npm install
某些内容时,您将看到incorrect data check
错误。如果您想避免处理此问题可能出现的麻烦,请包含该标志。有关更多详细信息,请参阅此问题和此评论
退出并返回到您的本机 shell。
$退出$拱门 ARM64
注意:如果您选择了标有“使用 Rosetta 打开”的框,而不是在第二步中运行 CLI 命令,您将在此处看到i386
。除非您有其他原因选择该框,否则您现在可以取消选择它。
检查以确保架构正确。 x64
是x86_64
的缩写,这就是您想要看到的。
$ 节点 -p process.arch x64
现在您应该可以像往常一样使用节点了。
如果您在 WSL-2 上遇到此错误:
卷曲 -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh |巴什 % 总计 % 已接收 % Xferd 平均速度 时间 时间 时间 当前 Dload 上传总花费左速度 0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0curl: (6) 无法解析主机:raw.githubusercontent.com
这可能是由于您的防病毒软件、VPN 或其他原因造成的。
可以ping 8.8.8.8
,但无法ping google.com
这可以通过在根目录中运行以下命令来简单地解决:
须藤 rm /etc/resolv.conf sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'sudo bash -c 'echo "[network]" > /etc/wsl.conf'sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'sudo chattr +i /etc/resolv.conf
这将删除运行 WSL 时自动生成的resolv.conf
文件,创建一个新文件并放入nameserver 8.8.8.8
,然后创建一个wsl.conf
文件并添加[network]
和generateResolveConf = false
以防止自动生成该文件文件。
您可以通过运行以下命令来检查文件的内容:
猫 /etc/resolv.conf
目前,唯一的维护者是@ljharb - 非常欢迎更多的维护者,我们希望随着时间的推移将人员添加到团队中。随着项目的发展,治理将被重新评估。
仅支持最新版本(目前为 v0.40.1)。
如果您无法更新到最新版本的nvm
,我们的合作伙伴将为所有不受支持的版本提供商业安全修复程序:
HeroDevs 永无休止的支持
请参阅 LICENSE.md。
版权所有 OpenJS 基金会和nvm
贡献者。版权所有。 OpenJS 基金会已注册商标并使用商标。 有关 OpenJS 基金会的商标列表,请参阅我们的商标政策和商标列表。 Node.js 是 Joyent, Inc. 的商标,经其许可使用。 OpenJS 基金会商标列表中未注明的商标和徽标是其各自所有者的商标™或注册®商标。使用它们并不意味着与它们有任何隶属关系或得到它们的认可。
OpenJS 基金会 |使用条款 |隐私政策 | OpenJS 基金会章程 |商标政策|商标列表| Cookie 政策