DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»

Bharathvaj
Bharathvaj

Posted on • Originally published at bharathvaj.me on

How to keep node_modules in sync with package.json

As a JS developer, while working on projects we frequently need to run npm install command on git pull or checkout to a different git branch where package.json is modified.

In majority of the cases, the dependencies won’t cause any issues, but if there any breaking change introduced by the dependency packages then we need to reinstall. We somehow forget to run the command. (I mostly forget it at least πŸ˜›).

How do we automate this?

Well, it's quite simple. Hooks!!!

Yes. Git hooks.

We can make use of git hooks to trigger npm install command if a package.json file has been modified.

Script to run inside git hooks.

#/usr/bin/env bash

changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"

check_run() {
    echo "$changed_files" | grep --quiet "$1" && eval "$2"
}

check_run package.json "npm install"
Enter fullscreen mode Exit fullscreen mode

Here we check whether package.json file is present in the diff between the current HEAD and original HEAD. To learn more about these refer to this Q&A

In order to do the magic,

  1. Save the script with git hook name (eg. post-merge)
  2. Make it executable by running chmod +x {HOOK_NAME}
  3. Finally put the file into git hook by mv {HOOK_NAME} .git/hooks/

Git Hooks

Name Invoked By
post-merge git pull / git merge
post-checkout git checkout / git clone

References:

Top comments (0)

Timeless DEV post...

How to write a kickass README

Arguably the single most important piece of documentation for any open source project is the README. A good README not only informs people what the project does and who it is for but also how they use and contribute to it.

If you write a README without sufficient explanation of what your project does or how people can use it then it pretty much defeats the purpose of being open source as other developers are less likely to engage with or contribute towards it.