一、引言
Ubuntu下安装Node.js主要有两种方式:通过apt安装和通过源码安装。本文主要讲解通过apt安装Node.js的方法。
二、通过apt安装Node.js
安装Node.js:
apt install nodejs
我之前已经安装过了,所以提示:“nodejs 已经是最新版”:
安装NPM:
apt install npm
我之前已经安装过了,所以提示:“npm 已经是最新版”:
查看Node.js版本:
node -v
查看npm版本:
npm -v
通过whereis命令可以看到Node.js和NPM被安装到/usr/local/bin目录下:
三、通过源码安装Node.js
相比于通过apt安装Node.js的方式,通过源码安装Node.js的灵活性更高,可以指定Node.js的安装目录,对源码进行裁剪,选择Node.js的版本。缺点是操作较麻烦,编译花费时间长。
首先在 下载 | Node.js 中文网 下载Node.js源码,比如下载node-v22.16.0.tar.gz:
解压:
tar -zxvf node-v22.16.0.tar.gz
进入Node.js源码目录:
生成Makefile,指定安装到/usr/local/nodejs下:
./configure --prefix=/usr/local/nodejs
可能会报错:ModuleNotFoundError: No module named '_bz2'。这个错误表示python 3.10无法找到_bz2模块,导致configure无法正常运行:
如果出现上述错误,通过whereis命令查看Ubuntu安装了哪些其它版本的python:
可以看到python3.8/lib-dynload目录下有一个文件为:“_bz2.cpython-38-x86_64-linux-gnu.so”:
针对上述错误,有两个解决方法:
方法一:
将_bz2.cpython-38-x86_64-linux-gnu.so拷贝到/usr/local/lib/python3.10/lib-dynload/目录下:
将/usr/local/lib/python3.10/lib-dynload/目录下的_bz2.cpython-38-x86_64-linux-gnu.so设置可执行权限:
chmod +x /usr/local/lib/python3.10/lib-dynload/_bz2.cpython-38-x86_64-linux-gnu.so
修改_bz2.cpython-38-x86_64-linux-gnu.so名称为_bz2.cpython-10-x86_64-linux-gnu.so:
mv _bz2.cpython-38-x86_64-linux-gnu.so _bz2.cpython-10-x86_64-linux-gnu.so
重新在Node.js源码目录下执行configure命令,观察错误是否消失。如果还是报上述错误,使用方法二。
方法二:
vim configure,编辑Node.js的configure文件。这里因为python3.10无法找到_bz2模块,python 3.8有_bz2模块,所以注释掉configure文件中的这几行,让configure只使用python 3.8:
重新执行./configure --prefix=/usr/local/nodejs,可以看到成功了:
编译:
make
这个时候可能又会报错:“g++: error: unrecognized command line option ‘-std=gnu++20’; did you mean ‘-std=gnu++2a’?”。这时候得更新编译器版本,将gcc和g++更新至11以上的版本:
添加编译链:
add-apt-repository ppa:ubuntu-toolchain-r/test
更新软件:
apt update
apt-get install gcc-11 g++-11
更改gcc和g++的软链接:
可以看到g++已经被更新了:
重新编译。编译可能需要花费数小时:
make
安装:
make install
可以看到Node.js已经成功安装到指定位置了:
修改环境变量:
vim ~/.bashrc
在该文件最后加入一行:
export PATH=$PATH:/usr/local/nodejs/bin
在Ubuntu系统中重新开启一个控制台,发现可以直接执行node和npm命令了,证明环境变量设置生效了: