Đây là chương trình hỗ trợ build và cài đặt một phiên bản Node.js bất kỳ từ mã nguồn trên Ubuntu/Debian.

Chuẩn bị môi trường

Cài đặt git, gcc compiler và các library cần thiết.

$ sudo apt update
$ sudo apt install build-essential git python3-distutils

Mã nguồn chương trình

Chương trình sau sẽ gỡ cài đặt phiên bản cũ build từ mã nguồn hiện tại nếu có → Clone / Fetch mã nguồn Node.js từ GitHub → Checkout phiên bản chỉ định → Build mã nguồn → Cài đặt vào thư mục /usr/local.

/usr/local/bin/nodejs.sh

#!/bin/bash
# nodejs.sh [VERSION]
# @author: Nguyen Hong Hai
#
NODE_SRC=/usr/local/src/node # path to the source code repo
NODE_DST=/usr/local # where nodejs will be installed
 
NODE_REPO=https://github.com/nodejs/node
 
mkdir -p ${NODE_SRC}
 
# download the source code if it is not available yet
if [ ! -d ${NODE_SRC}/.git ]; then
    rm -rf ${NODE_SRC}
    git clone ${NODE_REPO} ${NODE_SRC}
fi
 
cd ${NODE_SRC}
 
if git tag | grep -qE "^${1}$"; then
    VERSION=${1}
else
    echo "Invalid version ${1}."
    VERSION=$(git describe) # Latest nodejs version
    while :; do
        read -n 1 -p "Install version ${VERSION}? [y/N] :" q
        if [[ $q =~ ^[yN]$ ]]; then
            [[ $q == "y" ]] && break || exit 1
        else
            echo
        fi
    done
fi
 
echo "Cleaning up..."
make uninstall
make clean
 
# clean the git repository
git reset
git checkout .
git clean -fdx
# update to the latest versions
git pull
git fetch
 
echo "Downloading NodeJs ${VERSION}..."
git checkout ${VERSION} -b ${VERSION}
 
NCPUCORES=$(grep -c processor /proc/cpuinfo)
echo "Building the source code"
./configure --prefix=${NODE_DST}
make -j${NCPUCORES}
 
echo "Installing..."
make install

Cách sử dụng

Sử dụng lệnh nodejs.sh với cú pháp:

$ sudo nodejs.sh [VERSION]

Bạn có thể xem danh sách các version bằng lệnh git tag.

$ cd /usr/local/src/node
$ git tag

Mặc định tôi dùng git describe để lấy latest version khi không có tham số hoặc sai phiên bản nhưng có vẻ không lấy được chính xác phiên bản ổn định.

Vì vậy tốt nhất bạn nên chỉ định version một cách cụ thể vào tham số của script. Ví dụ, để cài đặt Node.js phiên bản 10.16.0

$ sudo nodejs.sh v10.16.0