搭建Hexo博客过程中出现EACCES权限错误的解决方法

背景

在终端输入npm install -g hexo-cli尝试安装 Hexo 的过程中,出现了EACCES权限错误(eacces permissions errors)。
官方文档强烈建议不要使用 root、sudo 等方法覆盖权限,我刚好没看到,用了sudo npm install -g hexo-cli,后续又会出现无权限的问题。

这个错误是因为,你没有足够的权限在/usr/local/lib/node_modules目录下创建新的目录。可以通过下面的方法解决这个问题:

方法1:使用node版本管理工具nvm,安装Node.js和npm

注:不推荐使用Node installer,因为它会把npm安装到具有本地权限的目录中,在全局运行npm时可能会导致EACCES权限错误。我们直接使用nvm安装即可。

1. 下载和安装nvm

1.1 在终端执行:

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

或者

1
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

也可以在github获取最新版本地址:https://github.com/nvm-sh/nvm#installing-and-updating

1.2 验证是否安装成功:
在终端输入command -v nvm,如果输出 nvm 则说明安装成功。

2. 使用nvm安装Node.js和npm

如果之前已经用其他方法安装过node.js,无需担心,nvm 会直接覆盖安装。
2.1 在终端输入nvm ls-remote,列出都有哪些可用版本
2.2 从中选择一个安装,例如 nvm install v18.15.0
2.3 使用安装好的版本,例如 nvm use v18.15.0
接下来就可以使用npm安装Hexo。在终端输入 npm install -g hexo-cli即可。

参考的原文档:
https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally/

方法2:使用sudo命令安装(不推荐)

hexo官方文档建议不要使用此方法,就不写了

方法3:手动更改npm的全局安装路径,将其设置为当前用户拥有写权限的目录

  1. 首先,在你的主目录下,创建一个全新的目录:
    1
    mkdir ~/.npm-global
    然后,在 **~/.npmrc**文件中配置新的路径(如果文件不存在,请创建一个):
    1
    echo "prefix=~/.npm-global" >> ~/.npmrc
    最后,将新的路径添加到你的系统环境变量中。在你的 **~/.bashrc~/.zshrc**或其他 shell 配置文件中添加以下内容:
    1
    export PATH=~/.npm-global/bin:$PATH
    保存文件后,重新加载配置文件或者重启终端:
    1
    source ~/.bashrc
    或者
    1
    source ~/.zshrc
    现在,你可以尝试重新安装 hexo-cli,不再需要使用 sudo
    1
    npm install -g hexo-cli