I agree shrinkwrap is necessary, and should probably be a more standard part of the npm workflow, but it&#x27;s kind of annoying to use in practice.<p>For one it generates <i>huge</i> files. Like 750KB on a project with a couple dozen dependencies: <a href="https:&#x2F;&#x2F;github.com&#x2F;metabase&#x2F;metabase&#x2F;blob&#x2F;master&#x2F;npm-shrinkwrap.json" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;metabase&#x2F;metabase&#x2F;blob&#x2F;master&#x2F;npm-shrinkw...</a><p>Secondly, it&#x27;s not deterministic and will generate huge diffs every time you run it even if nothing changes.<p>Uber has a tool called npm-shrinkwrap that in theory is supposed to solve the latter, but I&#x27;ve never gotten it working on my current projects: <a href="https:&#x2F;&#x2F;github.com&#x2F;uber&#x2F;npm-shrinkwrap" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;uber&#x2F;npm-shrinkwrap</a>