I'm used to deploy code depending on Composer (PHP's NPM cousing), that sports .json
and .lock
files. The first one describes the package and your version constraints, and the second one lists exactly what was installed. Always there's a lock file and you run composer install
you're sure to receive the same set of packages; running composer update
will re-read the json file, install new versions, and update the lock file.
That's awesome for production deployment, since you don't need to checkout your dependencies to your versioning system and you're sure to have the exact same set of dependencies in production as you have in development.
My question is: how to best automate deployment of NPM-dependent code? Is it possible to achieve a method similar to Composer? I've noticed that npm install
only installs what's first available in the package.json
file. After the first run, i.e. if you change a version constraint you must manually npm update
that package - and that would render automate deployment useless, as there's no way to check in to versioning "update this package here to a new version"...
npm shrinkwrap is a analog of composer.lock file. It will generate a npm-shrinkwrap.json, that have all deps with version in it, so you can use it to deploy to production env. Also you can try a various libs from npm to lock versions or search for updates of it without changing packages.json.