please correct me if I'm wrong because I just had a cursory look at NPM some time ago, but I believe
* it doesn't have virtual packages (in the sense, "'email-sender' is a package that provides a sendmail() function")
* it hardcodes a max of two dependency sets: runtime and dev. This maybe be better than a freeform Gemfile or a 6-scopes pom.xml but it seems quite arbitrary
E.g. even in scala land I got the feeling ivy/maven dependency management weren't universally loved, but maybe I am wrong?