发布日期:Jan 14, 2023 更新日期: 2023-1-15文章字数 0阅读时长:0分钟

type
Post
status
Published
date
Jan 14, 2023
slug
mac/nvm
tags
node.js
开发
nvm
mac
工具
category
开发工具
summary
nvm
icon
password
nvm 和 npm 都是 node.js 应用程序开发的常用工具。
  • nvm是node.js版本管理工具。Node Version Manager,也就是说NVM是Node.js的版本管理器,通过NVM我们就可以安装多个不同版本的Node.js并在需要的时候进行切换。
  • npm 是 JavaScript 包管理工具。全称:Node Package Manager,也就是 Node.js 包管理器,用于管理Node的大量扩展API。在安装 Node.js 时就会自动安装相应版本的NPM。
 

Mac 安装

在 Mac 下 nvm 的安装和遇到的问题。
注意:不要使用homebrew安装 nvm
具体的步骤如下:打开终端,通过官方的说明在终端中运行下面命令中的一种进行安装:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
💡
目前nvm最新版本v0.39.3, 要查看当前最新请前往 https://github.com/creationix...
安装输出
λ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15916 100 15916 0 0 24410 0 --:--:-- --:--:-- --:--:-- 24486 => Downloading nvm from git to '/Users/chris/.nvm' => Cloning into '/Users/chris/.nvm'... remote: Enumerating objects: 358, done. remote: Counting objects: 100% (358/358), done. remote: Compressing objects: 100% (304/304), done. remote: Total 358 (delta 41), reused 162 (delta 28), pack-reused 0 Receiving objects: 100% (358/358), 218.72 KiB | 1.13 MiB/s, done. Resolving deltas: 100% (41/41), done. * (HEAD detached at FETCH_HEAD) master => Compressing and cleaning up git repository => nvm source string already in /Users/chris/.zshrc => bash_completion source string already in /Users/chris/.zshrc => Close and reopen your terminal to start using nvm or run the following to use it now: export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
执行完成后,nvm存放在当前用户目录下的/.nvm(即是~/.nvm),并会将一段配置代码写入一个当前用户目录下的配置文件中(~/.bash_profile、 ~/.zshrc、 ~/.profile、或者 ~/.bashrc)
在安装完成后,也许你会在终端输入 nvm 验证有没有安装成功,这个时候你会发现终端打出 Command not found,其实这并不是没有安装成功,你只需要重启终端就行,再输入 nvm 就会出现 Node Version Manager 帮助文档,这表明你安装成功了。
检查 nvm 是否顺利安装成功,也可以使用以下指令:
command -v nvm
如果安装成功,会输出 nvm。

nvm的使用

很简单,主要是几个命令
  • nvm ls-remote // 列出官网上node的所有版本
  • nvm install --lts // 安装最新的lts版本
  • nvm install stable // 安装最新稳定版 node
  • nvm install <version> // 安装指定版本 (install v10.15.0 或 install 10.15.0)
  • nvm uninstall <version> // 卸载指定版本node,(如果删除的为当前使用版本,要解绑,则执行 nvm deactivate)nvm uninstall 19.4.0
  • nvm use <version> // 切换使用指定的版本node
  • nvm current //显示当前使用的版本
  • nvm ls //列出所有安装的版本
  • nvm alias <name> <version> //给不同的版本号添加别名
  • nvm unalias <name> //删除已定义的别名
  • nvm alias default <version> //指定默认版本(设定后需要打开新的终端才生效)
  • nvm deactivate //解除当前版本绑定
  • .....更多命令可在终端输入 nvm 查看

卸载

所有的不同版本的node都安装在~/.nvm/version/node/目录下,要删除卸载nvm直接将整个.nvm文件夹删除就ok了。

更新

Manual Upgrade:
For manual upgrade with git (requires git v1.7.10+):
  1. change to the $NVM_DIR
  1. pull down the latest changes
  1. check out the latest version
  1. activate the new version
( cd "$NVM_DIR" git fetch --tags origin git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)` ) && \. "$NVM_DIR/nvm.sh"

注意

这里需要注意的几点就是:
第一点 不要使用 homebrew 安装 nvm
第二点 关于 .zshrc 文件。如果用户 home 目录下没有则新建一个就可以了,不需要将下面的两段代码写进去,因为你在执行安装命令的时候,系统会自动将这两句话写入 .zshrc 文件中。
export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
网络上我找了好多文章都是说在安装前先手动将下面这两句话写进去,经过测试是不正确的,并且会造成安装不成功,这一点需要注意一下。
export NVM_DIR="${XDG_CONFIG_HOME/:-$HOME/.}nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
第三点 保证 Mac 中安装了 git,一般只要你下载了 Mac 的 Xcode 开发工具,它是自带 git 的。

安装错误解决

M1 nvm install 可能会安装不了V6.10之前的版本


Mac M1 中,nvm install 可能会安装不了V6.10之前的版本,报clang: error: no such file or directory: 'CXX=c++'错误
clang: error: no such file or directory: 'CXX=c++'
解决方案:在iTrem2 中输入
arch -x86_64 zsh # 这个命令主要让 shell 运行在 Rosetta2 下
即可,然后在进行安装指定的Node版本

参考:M1 nvm install 可能会安装不了V6.10之前的版本
Experimental support for the M1 architecture was added in node.js v15.3 and full support was added in v16.0. Because of this, if you try to install older versions of node as usual, you will probably experience either compilation errors when installing node or out-of-memory errors while running your code.
So, if you want to run a version prior to v16.0 on an M1 Mac, it may be best to compile node targeting the x86_64 Intel architecture so that Rosetta 2 can translate the x86_64 processor instructions to ARM-based Apple Silicon instructions. Here's what you will need to do:
  • Install Rosetta, if you haven't already done so
    • $ softwareupdate --install-rosetta
      You might wonder, "how will my M1 Mac know to use Rosetta for a version of node compiled for an Intel chip?". If an executable contains only Intel instructions, macOS will automatically use Rosetta to translate the instructions.
  • Open a shell that's running using Rosetta
    • $ arch -x86_64 zsh
      Note: This same thing can also be accomplished by finding the Terminal or iTerm App in Finder, right clicking, selecting "Get Info", and then checking the box labeled "Open using Rosetta".

 
参考文档:
  1. nvm的安装与使用(Mac 版) - SegmentFault 思否
  1. Node.js 环境设置 - for mac os - 掘金
  1. GitHub - nvm-sh/nvm: Node Version Manager
 

M1芯片Mac上Homebrew安装教程 M1芯片Mac上Homebrew安装教程
应用架构的演进趋势 | docker 应用架构的演进趋势 | docker