diff --git a/README.md b/README.md index 35325bb..e14c0fa 100644 --- a/README.md +++ b/README.md @@ -35,29 +35,75 @@ wget -nv https://bit.ly/node-installer -O - ./node-installer.sh; bash ./node-ins ### Choosing a specific version +**Latest** + ```bash -echo "Current node.js version is $(curl -fsSL https://nodejs.org/dist/index.tab | head -2 | tail -1 | cut -f 1)" +export NODEJS_VER="" +``` + +**Exact** + +```bash +export NODEJS_VER="v10.2.1" +``` + +**Latest of vX.Y.Z** + +```bash +export NODEJS_VER="v8.1" +``` + +**Latest of vX.YY.Z** + +```bash +# latest of v8.11.x +export NODEJS_VER="v8.11" +``` + +**Latest of vX.Y** + +```bash +export NODEJS_VER="v10" +``` + +Fun FYI, here's how the latest version is determined: + +```bash +NODEJS_VER=$(curl -fsSL https://nodejs.org/dist/index.tab | tail -n +2 | cut -f 1 | head -1 ) +echo "The current node.js version is $NODEJS_VER" ``` ```bash -# To install a specific version rather than defaulting to latest -# latest version at time of writing are v8.11.1 and v10.1.0 -export NODEJS_VER="v10.1.0" +BASE_VER="v10\\." +NODEJS_VER=$(curl -fsSL https://nodejs.org/dist/index.tab | tail -n +2 | cut -f 1 | grep $BASE_VER | head -1 ) +echo "Latest node.js $BASE_VER is $NODEJS_VER" ``` ### Choosing an install location Just set BOTH `NODE_PATH` and `NPM_CONFIG_PREFIX`. The install path will be the preceding `lib/node_modules` -(which you usually want to be the same as `NPM_CONFIG_PREFIIX` anyway). +(which you usually want to be the same as `NPM_CONFIG_PREFIX` anyway). ```bash -export NPM_CONFIG_PREFIX=/tmp/user/local -export NODE_PATH=/tmp/user/local/lib/node_modules +export NPM_CONFIG_PREFIX=/tmp/usr/local +export NODE_PATH=/tmp/usr/local/lib/node_modules +``` +A more realistic example for a self-contained node app: +```bash +export NPM_CONFIG_PREFIX=/opt/my-app +export NODE_PATH=/opt/my-app/lib/node_modules +``` + + +```bash curl -fsSL https://bit.ly/node-installer -o ./node-installer.sh; bash ./node-installer.sh --dev-deps +``` -# If you want to add the install location to your PATH +If you want to add the install location to your `PATH`: + +```bash PATH=$PATH:/tmp/user/local/bin ``` @@ -101,7 +147,7 @@ wget -nv https://bit.ly/node-installer -O /tmp/node-installer.sh; bash /tmp/node ### Other things you should know -This is what gets installed: +This is what gets installed with the dev dependencies: * rsync * curl diff --git a/install.sh b/install.sh index 0c613c7..9db3a02 100644 --- a/install.sh +++ b/install.sh @@ -14,7 +14,7 @@ # Not every platform has or needs sudo, gotta save them O(1)s... sudo_cmd="" -((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo" +((EUID)) && [[ -z "${ANDROID_ROOT:-}" ]] && sudo_cmd="sudo" deps_flag="$1" set -e @@ -247,12 +247,23 @@ if [ -n "${NODEJS_VER:-}" ]; then fi fi -if [ -z "${NODEJS_VER:-}" ]; then +NODEJS_VER="${NODEJS_VER:-v}" # Search for 'v' at the least +# sort -rV # will sort by version number, but it appears these are already sorted +# tail -n +2 # starts at line two (1-indexed) and all after (omits the csv header with 'version' and such) +# cut -f 1 # gets only the first column +# head -n 1 # gets only the most recent version +my_char="." +my_count=$(awk -F"${my_char}" '{print NF-1}' <<< "${NODEJS_VER}") +# get the latest version if partial +if [ $my_count -ne 2 ]; then + if [ "$NODEJS_VER" != "v" ]; then + NODEJS_VER="$NODEJS_VER\\." + fi if [ -n "$(type -p curl)" ]; then - NODEJS_VER=$(curl -fsL "$NODEJS_BASE_URL/dist/index.tab" | head -n 2 | tail -1 | cut -f 1) \ + NODEJS_VER=$(curl -fsL "$NODEJS_BASE_URL/dist/index.tab" | tail -n +2 | cut -f 1 | grep "^$NODEJS_VER" | head -n 1) \ || echo 'error automatically determining current node.js version' elif [ -n "$(type -p wget)" ]; then - NODEJS_VER=$(wget --quiet "$NODEJS_BASE_URL/dist/index.tab" -O - | head -n 2 | tail -1 | cut -f 1) \ + NODEJS_VER=$(wget --quiet "$NODEJS_BASE_URL/dist/index.tab" -O - | tail -n +2 | cut -f 1 | grep "^$NODEJS_VER" | head -n 1) \ || echo 'error automatically determining current node.js version' else echo "Found neither 'curl' nor 'wget'. Can't Continue." @@ -286,7 +297,7 @@ if [ -e "$node_install_path/bin/node" ]; then echo "" echo "node.js is already installed as node $($node_install_path/bin/node -v | grep v)" echo "" - echo "to reinstall please first run: rm $node_install_path/bin/node" + echo "to reinstall as ${NODEJS_VER} please first run: rm $node_install_path/bin/node" echo "" fi @@ -297,6 +308,7 @@ if [ -n "${NODEJS_VER}" ]; then bash "$my_tmp/${INSTALL_FILE}" "${NODEJS_VER}" fi +mkdir -p $node_install_path/lib/node_modules || $sudo_cmd mkdir -p $node_install_path/lib/node_modules chown -R $(whoami) $node_install_path/lib/node_modules || $sudo_cmd chown -R $(whoami) $node_install_path/lib/node_modules echo ""