114 lines
4.2 KiB
Markdown
114 lines
4.2 KiB
Markdown
|
---
|
||
|
title: Node.js / Volta / ZX Install
|
||
|
description: Ensures Node.js, Volta, and ZX are installed prior to Chezmoi applying the dotfile state.
|
||
|
sidebar_label: 08 Node.js / Volta / ZX Install
|
||
|
slug: /scripts/before/run_onchange_before_08-install-zx.sh.tmpl
|
||
|
githubLocation: https://github.com/megabyte-labs/install.doctor/blob/master/home/.chezmoiscripts/universal/run_onchange_before_08-install-zx.sh.tmpl
|
||
|
scriptLocation: https://github.com/megabyte-labs/install.doctor/raw/master/home/.chezmoiscripts/universal/run_onchange_before_08-install-zx.sh.tmpl
|
||
|
repoLocation: home/.chezmoiscripts/universal/run_onchange_before_08-install-zx.sh.tmpl
|
||
|
---
|
||
|
# Node.js / Volta / ZX Install
|
||
|
|
||
|
Ensures Node.js, Volta, and ZX are installed prior to Chezmoi applying the dotfile state.
|
||
|
|
||
|
## Overview
|
||
|
|
||
|
This script ensures required dependencies are installed. These dependencies include:
|
||
|
|
||
|
1. **[Node.js](https://nodejs.org/en)**: JavaScript runtime engine which is installed to ensure any user with Homebrew configured can access Node.js
|
||
|
2. **[Volta](https://volta.sh/)**: Node.js version manager that provides the capability of automatically using `package.json` defined Node.js versions
|
||
|
3. **[ZX](https://github.com/google/zx)**: Used for the script that installs the software packages on any OS
|
||
|
|
||
|
The Volta setup process will ensure that the user is configured to use the latest Node.js version, by default. It then
|
||
|
also ensures the user's `~/.bashrc` and `~/.zshrc` profiles are setup for use with Volta.
|
||
|
|
||
|
|
||
|
|
||
|
## Source Code
|
||
|
|
||
|
```
|
||
|
{{- if (ne .host.distro.family "windows") -}}
|
||
|
#!/usr/bin/env bash
|
||
|
# @file Node.js / Volta / ZX Install
|
||
|
# @brief Ensures Node.js, Volta, and ZX are installed prior to Chezmoi applying the dotfile state.
|
||
|
# @description
|
||
|
# This script ensures required dependencies are installed. These dependencies include:
|
||
|
#
|
||
|
# 1. **[Node.js](https://nodejs.org/en)**: JavaScript runtime engine which is installed to ensure any user with Homebrew configured can access Node.js
|
||
|
# 2. **[Volta](https://volta.sh/)**: Node.js version manager that provides the capability of automatically using `package.json` defined Node.js versions
|
||
|
# 3. **[ZX](https://github.com/google/zx)**: Used for the script that installs the software packages on any OS
|
||
|
#
|
||
|
# The Volta setup process will ensure that the user is configured to use the latest Node.js version, by default. It then
|
||
|
# also ensures the user's `~/.bashrc` and `~/.zshrc` profiles are setup for use with Volta.
|
||
|
|
||
|
{{ includeTemplate "universal/profile-before" }}
|
||
|
{{ includeTemplate "universal/logg-before" }}
|
||
|
|
||
|
### Ensure node is installed
|
||
|
if ! command -v node > /dev/null; then
|
||
|
if command -v brew; then
|
||
|
logg 'Installing `node` via Homebrew'
|
||
|
brew install node || NODE_EXIT_CODE=$?
|
||
|
if [ -n "$NODE_EXIT_CODE" ]; then
|
||
|
logg warn 'Calling `brew link --overwrite node` because the Node.js installation seems to be misconfigured'
|
||
|
brew link --overwrite node
|
||
|
fi
|
||
|
else
|
||
|
logg '`brew` is unavailable. Cannot use it to perform a system installation of node.'
|
||
|
fi
|
||
|
else
|
||
|
logg '`node` is available'
|
||
|
fi
|
||
|
|
||
|
### Ensure Volta is installed
|
||
|
if ! command -v volta > /dev/null; then
|
||
|
if command -v brew > /dev/null; then
|
||
|
logg 'Installing `volta` via `brew`'
|
||
|
brew install volta
|
||
|
else
|
||
|
logg warn '`brew` needs to be available to install Volta'
|
||
|
fi
|
||
|
else
|
||
|
if ! node --version > /dev/null; then
|
||
|
volta install node@latest
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
### Setup Volta
|
||
|
if command -v volta > /dev/null; then
|
||
|
### Handle scenario where VOLTA_HOME is not defined yet
|
||
|
if [ -z "$VOLTA_HOME" ]; then
|
||
|
logg warn 'VOLTA_HOME is not defined'
|
||
|
logg info 'Running `volta setup`'
|
||
|
volta setup
|
||
|
fi
|
||
|
|
||
|
### Source .bashrc
|
||
|
if [ -f "$HOME/.bashrc" ]; then
|
||
|
. "$HOME/.bashrc"
|
||
|
else
|
||
|
logg warn 'Could not find `~/.bashrc` to source the results of `volta setup` from'
|
||
|
fi
|
||
|
|
||
|
### Set PATH and install latest Node.js version via Volta
|
||
|
export PATH="$VOLTA_HOME/bin:$PATH"
|
||
|
logg 'Installing `node` via `volta`'
|
||
|
volta install node@latest
|
||
|
else
|
||
|
logg warn '`volta` needs to be installed'
|
||
|
fi
|
||
|
|
||
|
### Ensure zx is installed
|
||
|
if ! command -v zx > /dev/null; then
|
||
|
if command -v volta > /dev/null; then
|
||
|
logg 'Installing `zx` via `volta`'
|
||
|
volta install zx
|
||
|
else
|
||
|
logg '`volta` is missing'
|
||
|
fi
|
||
|
else
|
||
|
logg '`zx` is already installed'
|
||
|
fi
|
||
|
{{ end -}}
|
||
|
```
|