Last active
April 27, 2024 04:19
-
-
Save yvele/e98e3a155335a6e00e71 to your computer and use it in GitHub Desktop.
Extract version from package.json (NPM) using bash / shell
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Version key/value should be on his own line | |
PACKAGE_VERSION=$(cat package.json \ | |
| grep version \ | |
| head -1 \ | |
| awk -F: '{ print $2 }' \ | |
| sed 's/[",]//g' \ | |
| tr -d '[[:space:]]') | |
echo $PACKAGE_VERSION |
node -pe "require('./package.json').version"
$ node -pe "require('./package.json').version"
4.10.4
Node or any any other programming language interpreter with JSON support will handle unusual whitespaces correctly like in this case:
{"version"
: "1.0.0"
}
That's a big win, but such solution involves loading the whole language runtime into memory. The difference may go unnoticed on modern hardware, although it's still something to keep in mind.
If you need something just as robust, but more lightweight, then jq is an excellent tool :)
$ jq -r .version package.json
I combined all the examples here but also elsewhere into one big page, no idea what is best, but if it's useful to someone:
https://gist.github.com/dezren39/d71e381a3c70ce8463a9471cd2983617
# these can all be npm scripts, but anything can be an npm script
# a
echo $(cat ./package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]')
# b
echo $(cat ./package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed -E 's/(version)|[:,\",]//g' | tr -d '[[:space:]]')
# c
echo $(node --eval="process.stdout.write(require('./package.json').version)")
# d
node -pe "require('./package.json').version"
# e
jq -r .version ./package.json
# f
npm run version --silent # add version run-script to scripts: ' "version": "echo $npm_package_version" ' # also could access $npm_package_version any other way
# g not clean
npm version
# if published package, to check published package
# h
npm view . version
# i
npm show . version
# j
awk -F\" '/"version":/ {print $4}' package.json
# k
npx -c 'echo "$npm_package_version"'
# l
perl -ne 'print "$1\n" if /"version":\s*"(.*?)"/' package.json
# m
awk '/version/{gsub(/("|",)/,"",$2);print $2}' package.json
# n
sed -nr 's/^\s*\"version": "([0-9]{1,}\.[0-9]{1,}.*)",$/\1/p' package.json
#---
# npm package example, others exist
npm i -g json
# o (requires "npm i -g json")
json version -a < package.json
# p (requires "npm i -g json")
json dependencies -a < package.json | grep : | sed 's/^ *//;s/"//g;s/: /@/;s/,$//'
# q (requires "npm i -g json")
json dependencies -a < package.json | grep : | sed 's/[",]//g;s/: /@/;s/,$//'
# r (requires "npm i -g json")
json devDependencies -a < package.json | grep : | sed 's/^ *//;s/"//g;s/: /@/;s/,$//'
# s (requires "npm i -g json")
json devDependencies -a < package.json | grep : | sed 's/[",]//g;s/: /@/;s/,$//'
#---
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
node --eval="process.stdout.write(require('./package.json').version)"
do the job. Full example: