Where to start.
Probably the two biggest arguments are bloat[1] and broken builds. Both seem to be caused by an obsession with the culture of "never reinvent the wheel"[2] which can be stifling and over-the-top, especially given a community so willing to publish backwards incompatible changes come hell or high water.
Both of these -- ease of publishing breaking versions and making libraries that are 11 lines long for the sake of not repeating them -- may have something to do with how npm manages dependencies. That is, it doesn't. You ask for a specific version of a library and you get it. Simple. You don't share this code version other libraries on the system. It sort of makes it easy to do the wrong thing, like backwards incompatible changes. For another example, this can cause problems when library B and A get results from calling library C and then communicate to each other using those results. You see, A uses C at a completely different version than B does. You end up with madness, and two copies of C (bloat).
Contrast this with maven. Yea, lots of small libraries, but maven only allows one version of a library to exist and doesn't tell you exactly which one it will pick [4]. This is horribly broken BUT encourages people to NOT write backwards incompatible stuff. It encourages a healthy community. Maven central doesn't receive nearly as much hate as npm in my experience
Then there's the crypto mining incident[3], but that could arguably have happened in one of several communities, really.
[1]: https://twitter.com/tdvorak/status/678613940746756096?s=19
[2]: https://xkcd.com/2140/
[3]: https://link.medium.com/UVCo1GTaaW
[4]: https://maven.apache.org/guides/introduction/introduction-to...