Advertisement
Guest User

Untitled

a guest
Jul 29th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. #!/usr/bin/env bash
  2.  
  3. # Фейковый npm
  4. # Нужен для кэширования папки node_modules
  5. # Кэш находится в папке ~/.cache/npm-inject/[sha1 хэш файла package.json]/node_modules
  6. #
  7. # В PATH надо добавить путь папки с фейковым npm, таким образом при выполнении команды `npm install`
  8. # bash вызовет фейковый npm c параметром `install`.
  9. # Фейк проверяет наличие папки [sha1 хэш файла package.json] в кэше.
  10. # Если она в кэше, создаем на неё симлинк node_modules
  11. # Иначе вызываем оригинальный npm (вторая позиция в `which -a npm`), копируем node_modules в кэш
  12. #
  13. # Если указать переменную окружения NPM_INJECT_COPY=1, то вместо симлинка кэш будет скопирован.
  14. #
  15. # @author Shuhrat Shadmonkulov <zumra6a@yandex-team.ru>
  16.  
  17. set -e
  18. [[ -n ${DEBUG} ]] && set -x
  19.  
  20. INSTALL="false"
  21. ARGUMENTS=$@
  22. NPM=$(which -a npm | sed -n 2p) # Ищем оригинальный npm
  23.  
  24. while [ "$#" -gt "0" ]; do
  25. case $1 in
  26. i|install)
  27. INSTALL="true"
  28. ;;
  29. esac
  30. shift
  31. done
  32.  
  33. # Если в параметрах нет i или install, вызываем оригинальный npm
  34. if [[ $INSTALL == "false" ]]; then
  35. $NPM $ARGUMENTS
  36. exit $?
  37. fi
  38.  
  39. echo "==> Running npm wrapper script with node_modules caching"
  40.  
  41. SHRINKWRAP="$PWD/npm-shrinkwrap.json"
  42. PACKAGE_DEPS="${PWD}/package.json"
  43.  
  44. if [[ -f $SHRINKWRAP ]]; then
  45. PACKAGE_DEPS=$SHRINKWRAP
  46. fi
  47.  
  48. PACKAGES_HASH=$(openssl sha1 $PACKAGE_DEPS | awk '{print $2}')
  49. echo "sha1 of $PACKAGE_DEPS is $PACKAGES_HASH"
  50.  
  51. NODE_MODULES="$PWD/node_modules"
  52. CACHE_DIR="$HOME/.cache/npm-inject/$PACKAGES_HASH"
  53.  
  54. # Удаляем существующие модули, могли протухнуть
  55. echo "Removing existing node_modules if any"
  56. rm -rf "$NODE_MODULES"
  57.  
  58. # Если существует кэш, слинковать его в $NODE_MODULES
  59. if [[ -d $CACHE_DIR ]]; then
  60. echo "Cache found: $CACHE_DIR"
  61. else
  62. echo "Cache not found"
  63.  
  64. # Вызываем оригинальный npm
  65. echo "==> Executing: $NPM $ARGUMENTS"
  66. $NPM $ARGUMENTS
  67. NPM_EXIT_CODE=$?
  68.  
  69. if [[ $NPM_EXIT_CODE -ne 0 ]]; then
  70. echo "Something went wrong!"
  71. exit $NPM_EXIT_CODE
  72. fi
  73.  
  74. echo "==> Creating $CACHE_DIR"
  75. mkdir -p "$CACHE_DIR"
  76.  
  77. echo "Caching $NODE_MODULES"
  78. mv "$NODE_MODULES" "$CACHE_DIR"
  79. fi
  80.  
  81. if [[ -n ${NPM_INJECT_COPY} ]]; then
  82. echo "Copying $CACHE_DIR/node_modules to $NODE_MODULES"
  83. cp -RP "$CACHE_DIR/node_modules" "$NODE_MODULES"
  84. else
  85. echo "Linking $CACHE_DIR/node_modules to $NODE_MODULES"
  86. ln -s "$CACHE_DIR/node_modules" "$NODE_MODULES"
  87. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement