Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- # Фейковый npm
- # Нужен для кэширования папки node_modules
- # Кэш находится в папке ~/.cache/npm-inject/[sha1 хэш файла package.json]/node_modules
- #
- # В PATH надо добавить путь папки с фейковым npm, таким образом при выполнении команды `npm install`
- # bash вызовет фейковый npm c параметром `install`.
- # Фейк проверяет наличие папки [sha1 хэш файла package.json] в кэше.
- # Если она в кэше, создаем на неё симлинк node_modules
- # Иначе вызываем оригинальный npm (вторая позиция в `which -a npm`), копируем node_modules в кэш
- #
- # Если указать переменную окружения NPM_INJECT_COPY=1, то вместо симлинка кэш будет скопирован.
- #
- # @author Shuhrat Shadmonkulov <zumra6a@yandex-team.ru>
- set -e
- [[ -n ${DEBUG} ]] && set -x
- INSTALL="false"
- ARGUMENTS=$@
- NPM=$(which -a npm | sed -n 2p) # Ищем оригинальный npm
- while [ "$#" -gt "0" ]; do
- case $1 in
- i|install)
- INSTALL="true"
- ;;
- esac
- shift
- done
- # Если в параметрах нет i или install, вызываем оригинальный npm
- if [[ $INSTALL == "false" ]]; then
- $NPM $ARGUMENTS
- exit $?
- fi
- echo "==> Running npm wrapper script with node_modules caching"
- SHRINKWRAP="$PWD/npm-shrinkwrap.json"
- PACKAGE_DEPS="${PWD}/package.json"
- if [[ -f $SHRINKWRAP ]]; then
- PACKAGE_DEPS=$SHRINKWRAP
- fi
- PACKAGES_HASH=$(openssl sha1 $PACKAGE_DEPS | awk '{print $2}')
- echo "sha1 of $PACKAGE_DEPS is $PACKAGES_HASH"
- NODE_MODULES="$PWD/node_modules"
- CACHE_DIR="$HOME/.cache/npm-inject/$PACKAGES_HASH"
- # Удаляем существующие модули, могли протухнуть
- echo "Removing existing node_modules if any"
- rm -rf "$NODE_MODULES"
- # Если существует кэш, слинковать его в $NODE_MODULES
- if [[ -d $CACHE_DIR ]]; then
- echo "Cache found: $CACHE_DIR"
- else
- echo "Cache not found"
- # Вызываем оригинальный npm
- echo "==> Executing: $NPM $ARGUMENTS"
- $NPM $ARGUMENTS
- NPM_EXIT_CODE=$?
- if [[ $NPM_EXIT_CODE -ne 0 ]]; then
- echo "Something went wrong!"
- exit $NPM_EXIT_CODE
- fi
- echo "==> Creating $CACHE_DIR"
- mkdir -p "$CACHE_DIR"
- echo "Caching $NODE_MODULES"
- mv "$NODE_MODULES" "$CACHE_DIR"
- fi
- if [[ -n ${NPM_INJECT_COPY} ]]; then
- echo "Copying $CACHE_DIR/node_modules to $NODE_MODULES"
- cp -RP "$CACHE_DIR/node_modules" "$NODE_MODULES"
- else
- echo "Linking $CACHE_DIR/node_modules to $NODE_MODULES"
- ln -s "$CACHE_DIR/node_modules" "$NODE_MODULES"
- fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement