macOS Catalina下安装nvm、node及每次需要重载配置文件问题解决

在使用hexo写博客的时候,经常需要执行一些命令,但是发现每次打开终端,输入命令就提示command not found,找到问题后记录下这个问题,以及在最新的Catalina系统下安装nvm

Posted by 石福鹏 on 2020-10-30

每次需要重载配置文件的问题解决

先说几个概念,做前端开发的伙伴肯定都知道,但是做后端的,虽然偶然能用到,但是基本上都是按照网上的教程,并不清楚nvmnpmnodejs三者的区别

  • nvm:是nodejs的版本管理工具
    也就是说一个nvm可以管理很多node版本和npm版本
  • nodejs:项目开发时所需要的代码库
  • npmnodejs包管理工具
    在安装nodejs的时候,npm也会跟着一起安装,npm用来管理nodejs中的第三方插件

总结

nvm管理nodejsnpm的版本

npm可以管理nodejs的第三方插件

问题引入

为什么会突然想到写这个问题,是因为在使用Macbook写博客的时候,需要用到hexo,但安装这个的前提就是需要安装nodejs,但是安装成功后,使用命令行也没有问题,但是在下一次写的时候,发现执行任何命令都会变成:

1
zsh: command not found: hexo
1
zsh: command not found: nvm
1
zsh: command not found: npm

命令都不认识了,然后重新执行 source ~/.bash_profile之后,就可以了,但凡是再次打开一个tab,或者关闭该终端,重新打开,命令就有失效了,前几次,每次都是执行 source ~/.bash_profile,因为时间太紧了,终于有时间了就查一下解决下这个问题:

发现问题

查找资料后发现:

新的mac系统默认终端是zsh不再是bash,默认启动的文件是.zshrc不是.bash_profile。所以这样配置不会一直生效。

一直习惯行的配置在bash_profile中,一只没注意这个问题。

解决问题

创建.zshrc配置文件

1
touch ~/.zshrc

然后将.bash_profile中的配置全部复制到.zshrc

然后执行

1
source ~/.zshrc

问题得到解决

补充

  1. 环境变量文件的优先级

    1
    /etc/profile  /etc/paths  ~/.bash_profile  ~/.bash_login  ~/.profile  ~/.bashrc
    • /etc/profile (建议不修改这个文件 ) 全局(公有)配置,不管是哪个用户,登录时都会读取该文件。
    • /etc/bashrc (一般在这个文件中添加系统级环境变量) 全局(公有)配置,bash shell执行时,不管是何种方式,都会读取此文件。
    • ~/.bash_profile (一般在这个文件中添加用户级环境变量) 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!
    • ~/.bashrc (一般在这个文件中添加用户级环境变量) bash shell执行时,不管是何种方式,都会读取此文件。

    如果你的终端不是bash,而是zsh,配置文件就是.zshrc,终端打开的时候就会执行这个文件

macOS Catalina下安装nvm、node

前言

我们通常需要使用npm安装一些模块,特别是全局包,由于Mac系统的安全性限制,经常出现安装提示没有权限。我们可以通过修改权限的方式来解决这个问题,但是过于麻烦,官方推荐使用nvm管理工具解决这个问题

安装

首先需要说明的是:最好不要使用Homebrew来安装nvm,官方是这样说明的:

image-20201110163928860

  1. 打开终端,进入用户的home目录

    1
    cd ~
  2. 新建一个配置文件(如果没有):

    1
    touch ~/.zshrc

    这样,在下一步下载安装的时候,就会将环境变量自动写入该文件中

  3. 通过官方的说明在终端中运行下面命令中的一种进行安装:

1
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
1
curl  -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash

安装成功后,如果.zshrc文件中没有写入环境变量信息,那么执行nvm --version就会提示zsh: command not found: nvm
如果没有,将下面的代码复制到.zshrc

1
2
3
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
  1. 执行source ~/.zshrc即可,访问nvm --version,查看版本,nvm安装成功

  2. 安装nodejs

    1
    nvm  install {version}

    具体的版本号在官方上可以查到

  3. 安装完之后,可以使用nvm list 查看nodejs的所有版本,如果版本较多的时候,可以通过命令nvm use v13.6.0切换版本

补充

node被安装在哪里?

在终端,通过which node 来查询我们的node安装在哪里了,这里的地址是当前使用的node版本快捷方式的地址

如果想查询说有node版本的安装文件夹,在访达(finder)中,使用快捷键Command+shift+G,然后输入/Users/{你的用户名}/.nvm/versions/就可以看到

Mac默认是不显示隐藏的文件夹的,所以在访达中是不能直接看到的,在mac下显示隐藏文件的快捷键是Command+shift+.,隐藏也是这个快捷键