包管理器安装nodejs和n模块安装nodejs之后都做了什么底层的操作探究

一,包管理器安装nodejs

1,nodejs安装前

[root@hehui ~]# find / -name node
/proc/irq/19/node
/proc/irq/21/node
/proc/irq/22/node
/proc/irq/15/node
/proc/irq/14/node
/proc/irq/13/node
/proc/irq/12/node
/proc/irq/11/node
/proc/irq/10/node
/proc/irq/9/node
/proc/irq/8/node
/proc/irq/7/node
/proc/irq/6/node
/proc/irq/5/node
/proc/irq/4/node
/proc/irq/3/node
/proc/irq/2/node
/proc/irq/1/node
/proc/irq/0/node
/selinux/class/node
/selinux/initial_contexts/node
/sys/devices/system/node

2,使用包管理器安装之后

[root@hehui software]# find / -name node
/proc/irq/19/node
/proc/irq/21/node
/proc/irq/22/node
/proc/irq/15/node
/proc/irq/14/node
/proc/irq/13/node
/proc/irq/12/node
/proc/irq/11/node
/proc/irq/10/node
/proc/irq/9/node
/proc/irq/8/node
/proc/irq/7/node
/proc/irq/6/node
/proc/irq/5/node
/proc/irq/4/node
/proc/irq/3/node
/proc/irq/2/node
/proc/irq/1/node
/proc/irq/0/node
/selinux/class/node
/selinux/initial_contexts/node
/sys/devices/system/node
/usr/bin/node
/usr/share/node

3,安装前后对比结果

1 针对node关键字搜索结果:新增了以下目录或文件:

/usr/bin/node
/usr/share/node

2 针对npm关键字搜索结果:新增了以下目录或文件:

/usr/bin/npm
/usr/lib/node_modules/npm
/usr/lib/node_modules/npm/bin/npm

3 其他文件,也相应的添加在/usr/目录下了。

结论:包管理器安装nodejs,系统所做的操作是将相关文件添加到/usr/目录下。

二,n模块安装nodejs

1,使用which和whereis命令,比较n模块和n模块安装的nodejs的前后差异。

结论:

1,安装好n模块之后会在/usr/bin/生成n命令,会在创建/usr/local/n/versions/目录(用于存放n模块安装nodejs的安装文件)。
2,n模块安装nodejs之后在/usr/local/下的相关目录(主要是bin和lib)添加了nodejs某个版本的node,npm等相关文件。
3,当使用n切换版本的时候,会从/usr/local/n/versions/目录下copy相关版本的node,npm等相关文件到/usr/local/下的相关目录。

最后:在使用n模块安装nodejs之后,由于环境变量优先级(echo $PATH可以打印出环境变量的优先级)问题。所以n模块安装的nodejs会生效,而初始安装的nodejs优先级低于n模块安装的,所以就不生效了。

mac 上使用n模块遇到得坑

  1. 首先使用 brew 安装node
  2. 再安装 n 模块
  3. 再使用 npm 全局安装模块,如 npm install -g yarn
  4. 这个时候可能会无法使用 yarn

原因:比如npm 全局安装yarn时候,没有将安装的包加入/usr/local/lib/node_modules中,并且也没有将在/usr/local/bin中创建对应yarn软连接。

解决办法:brew uninstall node