Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Extract version from package.json (NPM) using bash / shell
# 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
@yvele

This comment has been minimized.

Copy link
Owner Author

@yvele yvele commented Feb 17, 2016

Updated to trim white spaces. Thanks to @swissmanu and @dbaba 👌

@4F2E4A2E

This comment has been minimized.

Copy link

@4F2E4A2E 4F2E4A2E commented Apr 14, 2017

# Gitlab CI working version
PACKAGE_VERSION=$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]')
@syahiaoui

This comment has been minimized.

Copy link

@syahiaoui syahiaoui commented May 25, 2018

variables:
PACKAGE_VERSION: $(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]')

//in your job or template
.package-template: &package_template
image: docker-hub.registry.integ.fr.auchan.com/docker:latest
stage: package
tags:
- stocks
script:
- export VERSION=eval $PACKAGE_VERSION
- echo "======> Getting VERSION: $VERSION"

@hejmsdz

This comment has been minimized.

Copy link

@hejmsdz hejmsdz commented Jun 5, 2019

PACKAGE_VERSION=$(grep '"version":' package.json -m1 | cut -d\" -f4)
@melarts

This comment has been minimized.

Copy link

@melarts melarts commented Oct 9, 2019

If I may, if fixed the regex for sed because per example if my package version was : v6.0.0-dev.3, I would get 6.0.0-d.3 as a result because "version" was not targeted as a full word.
And I had to add -E for the regex pipe to be understood

My change :

PACKAGE_VERSION=$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed -E 's/(version)|[:,\",]//g' | tr -d '[[:space:]]')

@damlys

This comment has been minimized.

Copy link

@damlys damlys commented Apr 26, 2020

node --eval="process.stdout.write(require('./package.json').version)" do the job. Full example:

$ pwd
/home/damlys/workspace/get-npm-package-version
$ ls
package.json
$ cat package.json
{
  "name": "myapp",
  "version": "0.1.0-rc.1+5398d0bde599de3ed5fc87e41af208e4754cbd52",
  "private": true
}
$ node --eval="process.stdout.write(require('./package.json').version)"
0.1.0-rc.1+5398d0bde599de3ed5fc87e41af208e4754cbd52$ export PACKAGE_VERSION=$(node --eval="process.stdout.write(require('./package.json').version)")
$ echo $PACKAGE_VERSION
0.1.0-rc.1+5398d0bde599de3ed5fc87e41af208e4754cbd52
$ echo "v${PACKAGE_VERSION}_FOO_BAR_BAZ"
v0.1.0-rc.1+5398d0bde599de3ed5fc87e41af208e4754cbd52_FOO_BAR_BAZ
$
@hiroshifariassaito

This comment has been minimized.

Copy link

@hiroshifariassaito hiroshifariassaito commented May 23, 2020

node -pe "require('./package.json').version"

$ node -pe "require('./package.json').version"
4.10.4
@hejmsdz

This comment has been minimized.

Copy link

@hejmsdz hejmsdz commented May 23, 2020

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
@dezren39

This comment has been minimized.

Copy link

@dezren39 dezren39 commented Jul 5, 2020

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