Most of the projects I work on these days contain a frequently-modified package.json
file to manage dependencies. You would think by know I'd be used seeing the package.json
file when I did a git pull
and it would trigger something in my head to execute npm install
to ensure I had the latest dependencies installed but I somehow continue to forget to do so. Instead I see npm start
result in errors which leads to facepalm after facepalm. It's probably time to automate this task.
A quick Google search led me to a series of gists to use a git hook
to trigger npm install
if a package.json file has been updated. Place a post-merge
file in your .git/hooks
directory with the following contents:
#/usr/bin/env bash # MIT © Sindre Sorhus - sindresorhus.com # git hook to run a command after `git pull` if a specified file was changed # Run `chmod +x post-merge` to make it executable then put it into `.git/hooks/`. changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)" check_run() { echo "$changed_files" | grep --quiet "$1" && eval "$2" } # Example usage # In this example it's used to run `npm install` if package.json changed and `bower install` if `bower.json` changed. check_run package.json "npm install" check_run bower.json "bower install"
Reading down the comments in the gist show a number of other useful conditional triggers, like PHP's composer install
, preprocessing of .sass files, and more.
# Updating git submodules check_run .gitmodules "git submodule init && git submodule update" # Installing composer dependencies check_run composer.json "composer install" # For those who use gulp check_run web/assets "gulp --production"
This hook will be incredibly useful for me moving forward -- no more needing to remember steps I need to execute upon every pull!