The current LTS version of node (a.k.a. node.js) is 14.15.x and many node developers use this version to build their applications. However the node.js packages of most Linux distributions come with an older version.
In the example of the current Debian stable version, Debian 10 (codename Buster), comes with node 10.21.0:
root@geek:~# apt-cache show nodejs
Package: nodejs
Version: 10.21.0~dfsg-1~deb10u1
Installed-Size: 156
Maintainer: Debian Javascript Maintainers <[email protected]>
Architecture: amd64
[...]
Note the package name in Debian is nodejs.
The same also applies to the npm package, the node.js package manager:
root@geek:~# apt-cache show npm
Package: npm
Version: 5.8.0+ds6-4+deb10u2
Installed-Size: 8446
Maintainer: Debian Javascript Maintainers <[email protected]>
Architecture: all
[...]
This can cause major problems when trying to install/build a node application using npm install:
root@geek:~/my-node-app# npm install bower gulp
npm WARN npm npm does not support Node.js v10.21.0
npm WARN npm You should probably upgrade to a newer version of node as we
npm WARN npm can't make any promises that npm will work with this version.
npm WARN npm Supported releases of Node.js are the latest release of 4, 6, 7, 8, 9.
npm WARN npm You can find the latest version at https://nodejs.org/
[...]
Download newer node.js LTS version and integrate into the system
The current LTS version can be downloaded from the nodejs site and extracted:
root@geek:~# wget https://nodejs.org/dist/v14.15.4/node-v14.15.4-linux-x64.tar.xz
root@geek:~# tar -xf node-v14.15.4-linux-x64.tar.xz
The extracted tar archive contains the following structure:
root@geek:~# cd node-v14.15.4-linux-x64
root@geek:~/node-v14.15.4-linux-x64# ls -la
total 184
drwxr-xr-x 2 1001 1001 4096 Jan 4 14:10 bin
-rw-r--r-- 1 1001 1001 53322 Jan 4 14:10 CHANGELOG.md
drwxr-xr-x 3 1001 1001 4096 Jan 4 14:10 include
drwxr-xr-x 3 1001 1001 4096 Jan 4 14:10 lib
-rw-r--r-- 1 1001 1001 80117 Jan 4 14:10 LICENSE
-rw-r--r-- 1 1001 1001 29006 Jan 4 14:10 README.md
drwxr-xr-x 5 1001 1001 4096 Jan 4 14:10 share
The bin folder contains the node (node.js) binary as well as symlinks for npm and npx.
root@geek:~/node-v14.15.4-linux-x64/bin# ls -la
total 72144
-rwxr-xr-x 1 1001 1001 73873832 Jan 4 14:10 node
lrwxrwxrwx 1 1001 1001 38 Jan 4 14:10 npm -> ../lib/node_modules/npm/bin/npm-cli.js
lrwxrwxrwx 1 1001 1001 38 Jan 4 14:10 npx -> ../lib/node_modules/npm/bin/npx-cli.js
The npm and npx files can be ignored for now.
Copy the node binary to /usr/local/bin/:
root@geek:~/node-v14.15.4-linux-x64# cp -p bin/node /usr/local/bin/
Now to make sure /usr/local/bin/node takes precedence of (possibly) other node versions installed on that system, use update-alternatives:
root@geek:~# update-alternatives --install /usr/bin/npm npm /usr/local/bin/npm-cli.js 1
update-alternatives: using /usr/local/bin/npm-cli.js to provide /usr/bin/npm (npm) in auto mode
It should now be safe to assume that all scripts and software using the node command, will use the just installed LTS version:
root@geek:~# node -v
v14.15.4
Download newer npm version and integrate into the system
The easiest and fastest way to install npm is to use the install shell script from npmjs.com:
root@geek:~# curl -L https://www.npmjs.com/install.sh | sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3755 100 3755 0 0 4396 0 --:--:-- --:--:-- --:--:-- 4396
fetching: https://registry.npmjs.org/npm/-/npm-6.14.11.tgz
removing existing npm
up to date in 0.119s
installing npm@latest
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
/usr/local/bin/npx -> /usr/local/lib/node_modules/npm/bin/npx-cli.js
+ [email protected]
added 435 packages from 889 contributors in 6.307s
successfully installed npm@latest
As seen in the output, npm itself is actually a javascript file named npm-cli.js. Even though the install script should create a symbolic link in /usr/local/bin/ (when run as root or with sudo), it is best to use update-alternatives here, too:
root@geek:~# update-alternatives --install /usr/bin/npm npm /usr/local/lib/node_modules/npm/bin/npm-cli.js 1
update-alternatives: using /usr/local/lib/node_modules/npm/bin/npm-cli.js to provide /usr/bin/npm (npm) in auto mode
root@geek:~# update-alternatives --display npm
npm - auto mode
link best version is /usr/local/lib/node_modules/npm/bin/npm-cli.js
link currently points to /usr/local/lib/node_modules/npm/bin/npm-cli.js
link npm is /usr/bin/npm
/usr/local/lib/node_modules/npm/bin/npm-cli.js - priority 1
The npm command can now be executed and it should use the just installed version:
root@geek:~# npm -v
6.14.11