But then you are still relying on modules available and their versions on the system where the node app is running. Bundling is a much more reliable way of doing things.
Bundling (and the like) is a necessary evil of ecosystems riding hard on the bleeding edge, like node.js...
... and I would say Ruby/Rails, but they ought to be growing up by now, and integrating sensibly with platform package management. :-)
The difference between Python and Ruby on Debian/Ubuntu systems is astounding, and as the node.js ecosystem matures I dearly hope it will look more like the Python world than the unending adolescence of Ruby/Rails.
It really just depends on what you're trying to do. As a desktop user you probably care most about stability; we can't have a python upgrade breaking apt. As a developer it's often important to have an up-to-date version of the tools and libraries you're using.
It has nothing to do with adolescence, and everything to do with different priorities. Debian favors stability, Ruby favors breakneck progress. Each has their pros and cons.
Awesome! Alas the doc I've been reading all points to the normal /usr/local method (eg, https://github.com/isaacs/npm/blob/master/doc/faq.md doesn't mention the new stuff). How can I make it use ~/.node_modules?