My project was using the NodeSource installer for version 14.x to install Node.js, npm, and npx. A couple weeks ago that stopped working (~September 2022) because the NodeSource nodejs-14.10.1 installer was no longer available. When using the NodeSource nodejs-16.15.0 installer version, npm and npx wasn't being installed (* Note below). Because of this I had to find another method to install Node.js.
Another Node Installer method Node.js recommends is to use the Node.js installer. I chose the https://nodejs.org/download/release/v16.15.0/node-v16.15.0-linux-x64.tar.xz archive file and it worked (Node.js, npm, and npx was installed)!
Steps to upgrade:
1. Verify prior versions
$ node -v
v14.10.1
$ npm -v
6.14.8
$ npx -v
6.14.8
2. Stop PM2 (PM2 is the node manager used)
pm2 kill
3. The NodeSource installer uses the yum repo file, verify it exists
ls -la /etc/yum.repos.d/nodesource*.repo
4. Uninstall NodeSource installed Node.js Enterprise Linux Packages
(steps taken from https://github.com/nodesource/distributions)
To completely remove Node.js installed from the rpm.nodesource.com package:
# use `sudo` or run this as root
yum remove nodejs (reply y)
rm -r /etc/yum.repos.d/nodesource*.repo
yum clean all
5. Install Node.js using Node.js archive tar file
(steps taken from https://github.com/nodejs/help/wiki/Installation#how-to-install-nodejs-via-binary-archive-on-linux)
mkdir -p /usr/local/lib/nodejs
wget https://nodejs.org/download/release/v16.15.0/node-v16.15.0-linux-x64.tar.xz
tar -xJvf node-v16.15.0-linux-x64.tar.xz -C /usr/local/lib/nodejs
Chose to use symbolic link to /usr/bin since this path is already in my PATH environment variable:
ln -s /usr/local/lib/nodejs/node-v16.15.0-linux-x64/bin/node /usr/bin/node
ln -s /usr/local/lib/nodejs/node-v16.15.0-linux-x64/bin/npm /usr/bin/npm
ln -s /usr/local/lib/nodejs/node-v16.15.0-linux-x64/bin/npx /usr/bin/npx
6. Verify install
$ node -v
v16.15.0
$ npm version
8.5.5
$ npx -v
8.5.5
7. Start PM2
pm2 start
I then ansiblized step 5 from the solution above. Tar and unzip had to be installed on the system for the ansible unarchive module to work.
# If Node.js is not installed use Node.js archive file to install
- block:
- name: Define Node.js version variable
shell: echo "v16.15.0"
register: command_output_nodejs_version
- name: Define Node.js install folder location
shell: echo "/usr/local/lib/nodejs"
register: command_output_nodejs_install_dir
- set_fact:
nodejs_version: "{{command_output_nodejs_version.stdout}}"
nodejs_install_dir: "{{command_output_nodejs_install_dir.stdout}}"
- name: Boolean if Node.js install folder exists
stat:
path: "{{nodejs_install_dir}}"
register: command_output_path_exists
- set_fact:
nodejs_install_dir_exists: "{{command_output_path_exists.stat.exists}}"
- debug:
msg: nodejs_version {{nodejs_version}}, nodejs_install_dir {{nodejs_install_dir}}, nodejs_install_dir_exists {{nodejs_install_dir_exists}}
- block:
- name: Create Node.js install folder
file:
path: "{{nodejs_install_dir}}"
state: directory
- name: Download and unarchive Node.js {{nodejs_version}} file
unarchive:
src: "https://nodejs.org/download/release/{{nodejs_version}}/node-{{nodejs_version}}-linux-x64.tar.xz"
dest: "{{nodejs_install_dir}}"
remote_src: yes
- name: Create symbolic link for node in /usr/bin
file:
src: "/usr/local/lib/nodejs/node-{{nodejs_version}}-linux-x64/bin/node"
dest: "/usr/bin/node"
state: link
- name: Create symbolic link for npm in /usr/bin
file:
src: "/usr/local/lib/nodejs/node-{{nodejs_version}}-linux-x64/bin/npm"
dest: "/usr/bin/npm"
state: link
- name: Create symbolic link for npx in /usr/bin
file:
src: "/usr/local/lib/nodejs/node-{{nodejs_version}}-linux-x64/bin/npx"
dest: "/usr/bin/npx"
state: link
when: not nodejs_install_dir_exists
- debug: msg="Node.js {{nodejs_version}} already installed"
when: nodejs_install_dir_exists
* Note: I stumbled upon NodeSource nodejs-16.15.0 installer failing to install npm and npx because of the below error:
"TypeError [ERR_INVALID_ARG_TYPE]: The \"file\" argument must be of type string. Received null".
The true problem was exposed here - "Calling [NPM] to install pm2-logrotate@2.7.0". Verifying the npm version failed since npm wasn't found.
No comments:
Post a Comment
I appreciate your time in leaving a comment!