Some useful features include:
* `npm --save $PACKAGE` - installs a package, adds it to your dependencies list. Python's equivalent is `pip install`, `pip freeze` to get the installed version, and a manual edit of the requirements file.
* Production dependencies & development dependencies. Python either has to use multiple files, or `setup.py`, which is vastly more complex.
* Installation of modules within the source directory - no need of a virtualenv. This isn't always good news, but it's generally pretty useful.
* Recursive dependencies. There's no global version of a module - your dependencies can in turn require different versions of other packages, without clobbering each other.
This isn't really a feature of npm or a failing of pip. Isn't this more of an evaluation of Node.js vs. Python? I'm sure that if Python loaded a local python_modules directory by default, pip would use it.
That said, I don't tend to use node.js, so NPM's virtues illude me.
- output your `node_modules` directory to anywhere other than the current directory. You can move it after the fact, but your package.json needs to be in CWD for npm to work. - move/don't use the `$HOME/.npm` directory - have deduplicated node dependencies in an app