Last active
April 21, 2024 23:41
-
-
Save SuperPaintman/851b330c08b2363aea1c870f0cc1ea5a to your computer and use it in GitHub Desktop.
NPM install for low RAM machins. And "npm install ... killed" problem
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# Author: SuperPaintman <[email protected]> | |
# | |
### | |
# Constants | |
### | |
RETVAL=0 | |
CCYAN=$(printf '\033[0;36m') | |
CGREEN=$(printf '\033[0;32m') | |
CBLUE=$(printf '\033[0;34m') | |
CGRAY=$(printf '\033[1;30m') | |
CRED=$(printf '\033[0;31m') | |
CNC=$(printf '\033[0m') | |
### | |
# Packages | |
### | |
node_script_dependencies=$(cat <<EOF | |
'use strict'; | |
var p = require('./package.json'); | |
var deps = []; | |
for (var packageName in p.dependencies) { | |
var packageV = p.dependencies[packageName]; | |
deps.push(packageName + '@' + packageV); | |
} | |
console.log(deps.join(';')); | |
EOF | |
) | |
node_script_devDependencies=$(cat <<EOF | |
'use strict'; | |
var p = require('./package.json'); | |
var deps = []; | |
for (var packageName in p.devDependencies) { | |
var packageV = p.devDependencies[packageName]; | |
deps.push(packageName + '@' + packageV); | |
} | |
console.log(deps.join(';')); | |
EOF | |
) | |
# Help | |
show_help () { | |
echo -e "${CCYAN}Usage${CNC}: $0 {development|production|all} (or null)" | |
echo -e "${CCYAN}Example${CNC}:" | |
echo -e " ${CGREEN}$0${CNC} production ${CGRAY}# install npm production dependencies${CNC}" | |
echo -e " ${CGREEN}$0${CNC} development ${CGRAY}# install npm development dependencies${CNC}" | |
echo -e " ${CGREEN}$0${CNC} all ${CGRAY}# install npm all dependencies${CNC}" | |
echo -e " ${CGREEN}$0${CNC} ${CGRAY}# install npm all dependencies${CNC}" | |
echo -e "" | |
echo -e "${CCYAN}Options${CNC}:" | |
echo -e " ${CGREEN}-s${CNC}, ${CGREEN}--silent${CNC} ${CGRAY} # silent mode (don't output NPM log)${CNC}" | |
echo -e " ${CGREEN}-h${CNC}, ${CGREEN}--help${CNC} ${CGRAY} # print help${CNC}" | |
} | |
# Flags | |
flag_silent=false | |
args=() | |
for arg in "$@"; do | |
case $arg in | |
-s|--silent) | |
flag_silent=true | |
;; | |
-h|--help) | |
show_help | |
exit $RETVAL | |
;; | |
-*|--*) | |
echo -e "${CRED}Unrecognized argument:${CNC} $arg" | |
exit 1 | |
;; | |
*) | |
args+=("$arg") | |
;; | |
esac | |
done | |
# npm install --only=production | |
node_dependencies_str=$(node -e "$node_script_dependencies") | |
# npm install --only=dev | |
node_devDependencies_str=$(node -e "$node_script_devDependencies") | |
### | |
# LazyInstall | |
# | |
# params: | |
# $1 {String} - array of packages joined with ";" | |
### | |
npm_f3_install () { | |
local dependencies=$1 | |
local array=(${dependencies//;/ }) | |
for element in "${array[@]}"; do | |
local color_element=$(echo "$element" | sed "s/^\(.\+\)@\(.\+\)\$/${CGREEN}\1${CNC}@${CCYAN}\2${CNC}/g") | |
echo -e " ${CBLUE}Package${CNC}: $color_element" | |
if [ "$flag_silent" = true ]; then | |
npm install --verbose "$element" > /dev/null 2>&1 | |
else | |
npm install --verbose "$element" | |
fi | |
done | |
} | |
npm_install () { | |
local only=$1 | |
local dependencies=$2 | |
if [ ! -z "${dependencies+1}" ]; then | |
local array=(${dependencies//;/ }) | |
echo -e " ${CBLUE}Try installing $only packages${CNC}:" | |
for element in "${array[@]}"; do | |
local color_element=$(echo "$element" | sed "s/^\(.\+\)@\(.\+\)\$/${CGREEN}\1${CNC}@${CCYAN}\2${CNC}/g") | |
echo -e " * $color_element" | |
done | |
fi | |
if [ ! -z "${only+1}" ]; then | |
if [ "$flag_silent" = true ]; then | |
npm install --verbose --only="$only" > /dev/null 2>&1 | |
else | |
npm install --verbose --only="$only" | |
fi | |
else | |
if [ "$flag_silent" = true ]; then | |
npm install --verbose > /dev/null 2>&1 | |
else | |
npm install --verbose | |
fi | |
fi | |
} | |
case "${args[0]}" in | |
production) | |
echo -e "${CCYAN}Start installing production dependencie${CNC}" | |
npm_install production ${node_dependencies_str} || npm_f3_install ${node_dependencies_str} | |
;; | |
development) | |
echo -e "${CCYAN}Start installing development dependencie${CNC}" | |
npm_install dev ${node_devDependencies_str} || npm_f3_install ${node_devDependencies_str} | |
;; | |
all|"") | |
echo -e "${CCYAN}Start installing all dependencie${CNC}" | |
# production | |
npm_install production ${node_dependencies_str} || npm_f3_install ${node_dependencies_str} | |
# development | |
npm_install dev ${node_devDependencies_str} || npm_f3_install ${node_devDependencies_str} | |
;; | |
*) | |
show_help | |
exit 1 | |
;; | |
esac | |
exit $RETVAL |
honestly this is very sick
@tylermadsen why?)
I absolutely love this script and use it on my Ghost blog. Do you mind adding a header to the top with usage documentation and a license?
Thanks!! It's awesome.
Thanks!
Unfortunately this isn't working for me for some reason. I keep getting errors like this:
npm-f3-install.sh: line 115: 8272 Killed npm install --verbose --only="$only" > /dev/null 2>&1
For what it is worth, I'm running it with npm-f3-install.sh production --silent
(also tried with all
) based on this recommendation. Anyone have any ideas?
Update: Ended up just resizing my droplet to 1GB of RAM and then resizing it after I finished the NPM install.
Epic script! 😄
I'll leave the following commands; May be help for those wishing to run this from a terminal:
curl -o npm-f3-install.sh https://gist.githubusercontent.com/SuperPaintman/851b330c08b2363aea1c870f0cc1ea5a/raw/4d3e792c6a54def095f451eeedc50d33ae361339/npm-f3-install.sh
sudo chmod +x npm-f3-install.sh
./npm-f3-install.sh
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
thanks for this! It is crucial script to having npm installed!☺️