mirror of
https://github.com/photoprism/photoprism.git
synced 2026-07-18 17:15:24 +00:00
When invoked as "sudo bash install-nodejs.sh" by an unprivileged user, "~" expanded to the calling user's home before sudo elevated, so root's ".npmrc" ended up with "cache=/home/<user>/.cache/npm" and subsequent "sudo npm install -g" runs left root-owned cache dirs inside the user's home. Hardcode the path so the cache always lands under root.
71 lines
3 KiB
Bash
Executable file
71 lines
3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# Installs NodeJS, NPM, TestCafe, Vitest, Mermaid CLI and ESLint on Linux.
|
|
# bash <(curl -s https://raw.githubusercontent.com/photoprism/photoprism/develop/scripts/dist/install-nodejs.sh)
|
|
|
|
PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/scripts:$PATH"
|
|
|
|
set -e
|
|
|
|
# shellcheck source=/dev/null
|
|
. /etc/os-release
|
|
|
|
# NodeJS major version to be installed (armhf still requires 22.x).
|
|
NODE_MAJOR=24
|
|
NPM_VERSION=latest
|
|
TESTCAFE_VERSION=3.7.4
|
|
MERMAID_VERSION=latest
|
|
|
|
if [ "$(dpkg --print-architecture)" = "armhf" ]; then
|
|
NODE_MAJOR=22
|
|
fi
|
|
|
|
# Check if NodeJS is installed.
|
|
if which node > /dev/null
|
|
then
|
|
echo "NodeJS is already installed."
|
|
else
|
|
echo "Installing NodeJS and NPM from deb.nodesource.com..."
|
|
|
|
# Download the signature key to "/etc/apt/keyrings/nodesource.gpg".
|
|
sudo mkdir -p /etc/apt/keyrings
|
|
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
|
|
|
# Add node repository source to "/etc/apt/sources.list.d/nodesource.list".
|
|
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
|
|
|
|
sudo apt-get update && sudo apt-get -qq install nodejs
|
|
fi
|
|
|
|
# Check if NPM is installed.
|
|
if which npm > /dev/null
|
|
then
|
|
echo "NPM is already installed."
|
|
else
|
|
echo "NPM is required to install these packages".
|
|
exit 1
|
|
fi
|
|
|
|
# Upgrade NPM and install development dependencies.
|
|
echo "Configuring NPM..."
|
|
sudo npm config set cache /root/.cache/npm
|
|
echo "Updating NPM..."
|
|
sudo npm install -g --ignore-scripts --no-fund --no-audit --no-update-notifier "npm@$NPM_VERSION" n@latest
|
|
echo "Installing npm-check-updates and license-report..."
|
|
sudo npm install -g --ignore-scripts --no-fund --no-audit --no-update-notifier npm-check-updates@latest license-report@latest
|
|
echo "Installing TestCafe..."
|
|
sudo npm install -g --ignore-scripts --no-fund --no-audit --no-update-notifier --loglevel=error "testcafe@$TESTCAFE_VERSION"
|
|
# Installs Mermaid CLI for rendering diagrams; --ignore-scripts skips puppeteer's
|
|
# Chromium download since the dev image already ships system chromium via apt.
|
|
echo "Installing Mermaid CLI..."
|
|
sudo npm install -g --ignore-scripts --no-fund --no-audit --no-update-notifier --loglevel=error "@mermaid-js/mermaid-cli@$MERMAID_VERSION"
|
|
echo "Installing Vitest..."
|
|
sudo npm install -g --ignore-scripts --no-fund --no-audit --no-update-notifier vitest @vitest/browser @vitest/coverage-v8 @vitest/ui
|
|
echo "Installing ESLint..."
|
|
sudo npm install -g --ignore-scripts --no-fund --no-audit --no-update-notifier eslint@9 prettier globals \
|
|
@eslint/eslintrc @eslint/js@9 eslint-config-prettier eslint-formatter-pretty \
|
|
eslint-plugin-html eslint-plugin-import eslint-plugin-node eslint-plugin-prettier \
|
|
eslint-plugin-vue eslint-plugin-vuetify eslint-webpack-plugin
|
|
echo "Installing Vue Language Server..."
|
|
sudo npm install -g --ignore-scripts --no-fund --no-audit --no-update-notifier @vue/language-server
|
|
echo "Done."
|