Recently I learned about the package.json vars feature of npm scripts.
This is a really neat feature that allows you to access fields from your
package.json as via variables in commands included in the
The variables follow the format
npm_package_version will contain the value of the
field in your package.json.
You can even access find dependencies and their versions. If you have express
4.16.0 in the
dependencies section of your package.json, then an
environment variable named
npm_package_dependencies_express=~4.16.0 would be
available when executing your scripts!
This might seem trivial, but it came in useful in a stateless GitHub file
watcher I developed. You can see in the
container:tag script here
that I used
npm_package_version to create a Docker tag. Before I knew about
this feature I was in the process of writing some messy bash to parse out the
Many more useful fields are available so check them out for yourself. A quick
and easy way to list them is to add something like the following to your
scripts in a package.json and run it using
npm run list-vars:
"list-vars": "echo $(env) | tr ' ' '\n' | grep -i 'npm_'"
Note: This is not a perfect script, and is only tested on macOS. It splits on spaces so it won’t work on fields such as
author since that will typically contain spaces, but it’s good enough to get the point across!
The output below shows a subset of the variables this printed on my machine. Some of these could be really useful in your scripts!
npm_package_license=MIT npm_package_scripts_deploy=serverless npm_package_dependencies_barelog=~0.1.0 npm_package_devDependencies_serverless=~1.43.0 npm_package_husky_hooks_pre_commit=npm npm_package_bugs_url=https://github.com/evanshortiss/serverless-github-file-watch/issues npm_package_version="1.0.0"