NPM is slow. I mean it is really, really slow when downloading packages. Partially because it makes a ton of requests to remote servers. That can be made faster!
There are 2 options that you'll find useful:
They both create a local cache that npm is later on interact with instead of the remote repository.
npm_lazy
This one is really easy to setup and use. Just donpm install -g npm_lazy
npm_lazy
and use npm with the local registry like so:
npm --registry http://localhost:8080 install
Nexus
This is a bit more complex. Nexus can be started as a stand-alone app quite easily but I would recommend using Docker as it is a far easier experience. So to start Nexus you type:docker run -d -p 8081:8081 --name nexus sonatype/nexus
Then navigate to http://localhost:8081, login as admin/admin123 and create an npm-proxy. Select "Repositories" from the list on the left hand side, then from the "Add..." drop down at the top select "Add proxy repository", fill in as follows:
- Repository ID - npm-registry-proxy
- Repository Name = NPM Registry Proxy
- Provider - npm
- Remote Storage Location - https://registry.npmjs.org
Use it as follows:
npm --registry http://localhost:8081/content/repositories/npm-registry-proxy install
What's the gain?
Depending on the project you'll see a 30-50 percent speed boost when downloading packages. For the example project that I used here are the stats:No proxy | npm_lazy | Nexus |
---|---|---|
1m43s | 1m22s | 57s |
Edit on 23rd of January 2017: Forget all of the above. Just switch to Yarn and live happily ever after.