包管理器安装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模块遇到得坑
- 首先使用 brew 安装node
- 再安装 n 模块
- 再使用 npm 全局安装模块,如
npm install -g yarn
- 这个时候可能会无法使用 yarn
原因:比如npm 全局安装yarn时候,没有将安装的包加入/usr/local/lib/node_modules中,并且也没有将在/usr/local/bin中创建对应yarn软连接。
解决办法:brew uninstall node