Creating an NPM Cache
Kept running into issues with npm install failing in CI due to Amazon S3 borkages. This occurred with shocking regularity - we're talking one out of every five builds. I'm sure this was exacerbated by the large number of node modules involved in the node project in question, but S3 has never been a good choice if you need reliability but are unwilling to invest in heavy error checking/handling.
Anyway, clearly I'm not the only one experiencing this, because npm caches are a thing. For my money, I use NPM Lazy. Installation is pretty simple:
mkdir npm-cache cd npm-cache npm install npm_lazy
Edit node_modules/npm_lazy/config.js. You'll want to check the URL and potentially proxy sections. In my case, I opted to set up a reverse proxy by way of haproxy, in order to provide http auth style authentication in front of the cache.
Access to the cache is done at the npm level. If you've just got a straight up cache:
npm --registry http://your.cache.foo:port/ <whatever>
If you've got a proxy/http auth in front of it:
npm --registry http://user:firstname.lastname@example.org:port/ <whatever>
Bonus: SystemD Init
The following assumes you're running npm_lazy by way of NVM under /home/node via a user named node. Alter settings as necessary, of course.
[Unit] Description=NPM Proxy [Service] WorkingDirectory=/home/node/npm-cache/node_modules/npm_lazy ExecStart=/home/node/.nvm/current/bin/node server.js Restart=always StandardOutput=syslog StandardError=syslog SyslogIdentifier=npm-lazy User=node Group=node [Install] WantedBy=multi-user.target