每次安装完了就忘记了,再次安装的时候还得上网查,这次就记录下来,方便后面查看。

我用的环境 版本 CentOS 7

安装 node

下载地址 http://nodejs.cn/download/

下载 “Linux 二进制文件 (x64)” 对应的文件

wget https://npmmirror.com/mirrors/node/v16.16.0/node-v16.16.0-linux-x64.tar.xz

解压

tar -xvf node-v16.16.0-linux-x64.tar.xz node16

在node16 文件夹下找到 bin目录,里面有 node文件可以直接执行

cd node16
./node

这样执行比较麻烦,我们需要在任何地方,直接执行 node 命令。

全局执行 node 命令

首先看下命令的查找路径

echo $PATH

输出,大概这样
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

你可以在其中任意位置加上软链,都可以全局访问。 比如 在 user/local/bin 上加软链

sudo ln -s /home/duhongwei/tools/node16/bin/node node

接下来我们安装一个模块 PM2 npm install pm2 --location=global

安完了后执行pm2 发现找不到命令。这是为什么呢?我们查下全局安装的路径

npm config get prefix

在我的环境中输出

/home/duhongwei/tools/node16

PM2命令在 /home/duhongwei/tools/node16/bin
因为这个路径并不包含在 $PATH 中,所以找不到。

一个方法是把这个路径包含在 $PATH 中 ,打开 ~/.bash_profile 修改 path

PATH=$PATH:/home/duhongwei/tools/node16

另一个方法是修改全局安装目录

npm config set prefix /usr/local

经过这样的设置,当全局安装的时候,模块文件会安装在 /usr/local/lib/node_modules 下面
命令会安装在 /usr/local/bin 下面,而/usr/local/bin包含在 $PATH里,所以立即全局有效了。
但是这样有一个小问题,就是全局安装的时候需要加上 sudo,因为/usr/local 需要 root权限。

所以,如果不需要考虑所有用户,只是自己用方便的话,用第一种方法为好。

sudo 执行 node 命令

经过上面的折腾,在自己用户下面用是没问题了。但是当 sudo node 的时候却提示找不到命令,这是为什么呢。

为了安全,用sudo 查找命令的路径和直接用 root 查找命令的路径不同,linux做了重置。

我们修改重置后的路径就可以了

sudo vi  /etc/sudoers

找到这一行 Defaults   secure_path,在后面加上 node 命令的绝对路径,把 /home/duhongwei/tools/node16/bin,修改成你的实际路径就可以了。

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/home/duhongwei/tools/node16/bin

最简单的安装方法

上面经过这么多步骤,是为了让你知道里面的原理,实际安装的时候,三步就可以。

  1. 下载 node 二进制文件,保证所有用户可读,可执行。
  2. 把 node,npm,npx 加软链接到 /usr/bin
  3. npm config set prefix /usr

经过这样三步后,所有用户都可以执行 node ,npm,npx 命令,sudo 也没有问题。
为什么sudo 也可以呢,因为在 sudo 重置的路径中黑夜包含 /user/bin

root 用户可能不好用,不过一般也不用root用户,所以没什么问题。如果让 root用户也可以,修改root下面的./bash_profile,把 /usr/bin 加到 PATH就好了。如果加前面有讲。

如果某个用户不好用,可能是这个用户修改了默认的查找路径,把 /user/bin加到查找路径就可以了

如果只是自己用的话,用下面的步骤,/home/duhongwei/bin是举例,实际换成你的路径。

  1. 下载 node 二进制文件
  2. 把 node,npm,npx 加软链接到 /home/duhongwei/bin
  3. npm config set prefix /home/duhongwei (注意这里没有 /bin)
  4. 如果 /home/duhongwei/bin 没有在$PATH里的话,把 /home/duhongwei/bin 加到 $PATH

都是一样的,就是路径不一样,放在自己目录下的好处是执行的时候不用加 sudo ,而且也不影响别人。