We must live on different planets. Our eng team and CI tool needs to run npm install multiple times to coerce this lumbering beast into writing all of our requirements into a directory.
Every time it unreliably installs my dependencies as specified (after declaring exact versions required in my package.json) I scream into the void "you had one job!". It's a frequent cause of frustration for me despite providing access to a wonderfully colorful library of software.
Availability of packages on npm and in the larger JS ecosystem is at an all time high and yes, JS as a language seems to be doing well, but npm is, in my opinion, in dire need of some tlc.
Declaring exact versions in your package.json doesn't make installs consistent. An example:
A's package.json says A needs exactly B version 1.2.0
B's package.json says B needs C version 2 or newer
C can be any version.
shrinkwrap will help you with this. It's better in npm v3 (install updates shrinkwrap by default)Maybe npm is broken and everyone is either just apologizing for it or complaining instead of fixing it (myself included).
Recently I ran into issues with npm global, Jenkins, and Windows Server and I was ready to burn the building down. I give npm a share of the blame, but not all, but the major issue was where npm global installs tried to install when run in Jenkins as a service.
Can you explain what this has to do with node.js? I've done server-side DOM manipulation for years, in both .NET and Python.