Cache `npm install` results by hashing dependencies