每次安装完了就忘记了,再次安装的时候还得上网查,这次就记录下来,方便后面查看。
我用的环境 版本 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
最简单的安装方法
上面经过这么多步骤,是为了让你知道里面的原理,实际安装的时候,三步就可以。
- 下载 node 二进制文件,保证所有用户可读,可执行。
- 把 node,npm,npx 加软链接到 /usr/bin
- 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是举例,实际换成你的路径。
- 下载 node 二进制文件
- 把 node,npm,npx 加软链接到 /home/duhongwei/bin
- npm config set prefix /home/duhongwei (注意这里没有 /bin)
- 如果 /home/duhongwei/bin 没有在
$PATH
里的话,把 /home/duhongwei/bin 加到 $PATH
都是一样的,就是路径不一样,放在自己目录下的好处是执行的时候不用加 sudo ,而且也不影响别人。