为什么 n 会抛出错误?错误:需要 sudo(或更改所有权,或定义 N_PREFIX)

Ric*_*lev 14 node.js

我想安装最新的 Node.js 版本

n latest

  installing : node-v14.2.0
       mkdir : /usr/local/n/versions/node/14.2.0
mkdir: cannot create directory ‘/usr/local/n’: Permission denied

  Error: sudo required (or change ownership, or define N_PREFIX)
Run Code Online (Sandbox Code Playgroud)

所有权有问题。我试图解决这个问题

sudo chown -R $(whoami) /usr/local/n
Run Code Online (Sandbox Code Playgroud)

又是同样的错误。

n latest
cp: cannot create directory '/usr/local/lib/node_modules': Permission denied
cp: cannot create regular file '/usr/local/bin/node': Permission denied
cp: cannot create symbolic link '/usr/local/bin/npm': Permission denied
cp: cannot create symbolic link '/usr/local/bin/npx': Permission denied
Run Code Online (Sandbox Code Playgroud)

n 中的权限

/usr/local/n$ ll
total 12
drwxrwxr-x  3 miki root 4096 ???  8 13:29 ./
drwxr-xr-x 11 root root 4096 ???  8 13:29 ../
drwxrwxr-x  3 miki miki 4096 ???  8 13:29 versions/
Run Code Online (Sandbox Code Playgroud)

解决了

sudo chown -R $(whoami) /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share
Run Code Online (Sandbox Code Playgroud)

Ign*_*ago 20

语境

这些通常是默认情况下的权限/usr/local/n

drwxr-xr-x root  wheel  .
drwxr-xr-x root  wheel  ..
drwxr-xr-x root  wheel  versions
Run Code Online (Sandbox Code Playgroud)

可能的解决方案

A. 直接将所有权更改给您的用户(更快):

您需要更改n存储node版本所有权的位置:

drwxr-xr-x root  wheel  .
drwxr-xr-x root  wheel  ..
drwxr-xr-x root  wheel  versions
Run Code Online (Sandbox Code Playgroud)

B. 将自己加入组并授予写权限(更安全):

  1. 将自己添加到wheel群组

    苹果系统:

     sudo dseditgroup -o edit -a $(whoami) -t user wheel
    
    Run Code Online (Sandbox Code Playgroud)

GNU/Linux:

    sudo usermod -a -G wheel $(whoami)
Run Code Online (Sandbox Code Playgroud)
  1. 更改wheel成员可以在该文件夹上写入的内容:

     sudo chmod -R g+w /usr/local/n/
    
    Run Code Online (Sandbox Code Playgroud)

  • `sudo mkdir -p /usr/local/n && sudo chown -R $(whoami) /usr/local/n` (10认同)
  • 没有这样的文件或目录。 (2认同)

小智 16

您只需要定义 N_PREFIX 即可。

  • 首先创建将保存n条数据的文件夹

    mkdir $HOME/.n

  • 然后导出 .bashrc 文件中的 N_PREFIX

    export N_PREFIX=$HOME/.n

如果您使用fishshell,请将其添加到您的.config.fish 文件中:set -x N_PREFIX $HOME/.n


Rem*_*emy 8

首选解决方案应该是通过定义N_PREFIX.

要将目录更新为您的用户目录,请使用以下命令:

export N_PREFIX=$HOME/.n
export PATH=$N_PREFIX/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

文档参考: https: //github.com/tj/n#optional-environment-variables