#!/bin/bash DIR="$(cd $(dirname $0) && pwd)" BIN_DIR="$(cd $DIR/.. && pwd)" # Import functions . $BIN_DIR/helper/fn # Usage usage() { cat <<-EOF Usage: $0 [options...] Options: -m, --manager Package manager: npm (default), yarn or pnpm -s, --shame Shamefully hoist (only pnpm) -h, --help Show usage EOF exit 2 } unset CURR_FOLDER CURR_FOLDER="$(pwd)" unset ACTION ACTION=npm unset SHAME SHAME="" unset VERBOSE VERBOSE=false unset CMD_AVAILABLE CMD_AVAILABLE=("npm" "yarn" "pnpm") for i in "$@"; do case $i in -h|--help) usage ;; -m|--manager) ACTION="${2}" shift ;; -s|--shame) SHAME="--shamefully-hoist" shift ;; -*|--*) abort "Unknown option $i" ;; *) ;; esac done # Check command available [[ ! " ${CMD_AVAILABLE[*]} " =~ " ${ACTION} " ]] && usage # Go to current directory cd $CURR_FOLDER # Remove current data rm -rf \ "${CURR_FOLDER}/node_modules" \ "${CURR_FOLDER}/package-lock.json" \ "${CURR_FOLDER}/yarn.lock" \ "${CURR_FOLDER}/.yarn" \ "${CURR_FOLDER}/.yarnrc.yml" \ "${CURR_FOLDER}/.pnp.*" \ "${CURR_FOLDER}/pnpm-lock.yaml" # Generate .yarnrc.yml if [ "${ACTION}" = "yarn" ]; then echo "" > "${CURR_FOLDER}/.yarnrc.yml" yarn set version stable echo "nodeLinker: node-modules" >> "${CURR_FOLDER}/.yarnrc.yml" fi # Install packages if [ "${ACTION}" = "pnpm" ]; then $ACTION install $SHAME else $ACTION install fi # Audit packages test $? -ne 0 && abort "${ACTION} failed" || ok "zerado..." test "${ACTION}" = "yarn" && yarn npm audit || $ACTION audit exit 0