# node.js – Is there a way to get version from package.json in nodejs code?

## The Question :

647 people think this question is useful

Is there a way to get the version set in package.json in a nodejs app? I would want something like this

var port = process.env.PORT || 3000
app.listen port
console.log "Express server listening on port %d in %s mode %s", app.address().port, app.settings.env, app.VERSION


• Is it more important to get the version of Node or the version declared in package.json? If the form, this will give you the running version: console.log(process.version)

1035 people think this answer is useful

I found that the following code fragment worked best for me. Since it uses require to load the package.json, it works regardless the current working directory.

var pjson = require('./package.json');
console.log(pjson.version);



A warning, courtesy of @Pathogen:

Doing this with Browserify has security implications.
Be careful not to expose your package.json to the client, as it means that all your dependency version numbers, build and test commands and more are sent to the client.
If you’re building server and client in the same project, you expose your server-side version numbers too. Such specific data can be used by an attacker to better fit the attack on your server.

405 people think this answer is useful

If your application is launched with npm start, you can simply use:

process.env.npm_package_version



See package.json vars for more details.

177 people think this answer is useful

Using ES6 modules you can do the following:

import {version} from './package.json';



113 people think this answer is useful

Or in plain old shell:

$node -e "console.log(require('./package.json').version);"  This can be shortened to $ node -p "require('./package.json').version"



72 people think this answer is useful

There are two ways of retrieving the version:

1. Requiring package.json and getting the version:
const { version } = require('./package.json');


1. Using the environment variables:
const version = process.env.npm_package_version;



Please don’t use JSON.parse, fs.readFile, fs.readFileSync and don’t use another npm modules it’s not necessary for this question.

43 people think this answer is useful

Here is how to read the version out of package.json:

fs = require('fs')
version = json.version



EDIT: Wow, this answer was originally from 2012! There are several better answers now. Probably the cleanest is:

const { version } = require('./package.json');



34 people think this answer is useful

For those who look for a safe client-side solution that also works on server-side, there is genversion. It is a command-line tool that reads the version from the nearest package.json and generates an importable CommonJS module file that exports the version. Disclaimer: I’m a maintainer.

$genversion lib/version.js  I acknowledge the client-side safety was not OP’s primary intention, but as discussed in answers by Mark Wallace and aug, it is highly relevant and also the reason I found this Q&A. ## The Answer 8 23 people think this answer is useful There is another way of fetching certain information from your package.json file namely using pkginfo module. Usage of this module is very simple. You can get all package variables using: require('pkginfo')(module);  Or only certain details (version in this case) require('pkginfo')(module, 'version');  And your package variables will be set to module.exports (so version number will be accessible via module.exports.version). You could use the following code snippet: require('pkginfo')(module, 'version'); console.log "Express server listening on port %d in %s mode %s", app.address().port, app.settings.env, module.exports.version  This module has very nice feature – it can be used in any file in your project (e.g. in subfolders) and it will automatically fetch information from your package.json. So you do not have to worry where you package.json is. I hope that will help. ## The Answer 9 18 people think this answer is useful Option 1 Best practice is to version from package.json using npm environment variables. process.env.npm_package_version  more information on: https://docs.npmjs.com/using-npm/config.html This will work only when you start your service using NPM command. Quick Info: you can read any values in pacakge.json using process.env.npm_package_[keyname] Option 2 Setting version in environment variable using https://www.npmjs.com/package/dotenv as .env file and reading it as process.env.version ## The Answer 10 11 people think this answer is useful Just adding an answer because I came to this question to see the best way to include the version from package.json in my web application. I know this question is targetted for Node.js however, if you are using Webpack to bundle your app just a reminder the recommended way is to use the DefinePlugin to declare a global version in the config and reference that. So you could do in your webpack.config.json const pkg = require('../../package.json'); ... plugins : [ new webpack.DefinePlugin({ AppVersion: JSON.stringify(pkg.version), ...  And then AppVersion is now a global that is available for you to use. Also make sure in your .eslintrc you ignore this via the globals prop ## The Answer 11 7 people think this answer is useful You can use ES6 to import package.json to retrieve version number and output the version on console. import {name as app_name, version as app_version} from './path/to/package.json'; console.log(App ----${app_name}\nVersion ---- ${app_version});  ## The Answer 12 6 people think this answer is useful To determine the package version in node code, you can use the following: 1. const version = require('./package.json').version; for < ES6 versions 2. import {version} from './package.json'; for ES6 version 3. const version = process.env.npm_package_version; if application has been started using npm start, all npm_* environment variables become available. 4. You can use following npm packages as well – root-require, pkginfo, project-version. ## The Answer 13 4 people think this answer is useful You can use the project-version package. $ npm install --save project-version



Then

const version = require('project-version');

console.log(version);
//=>  '1.0.0'



It uses process.env.npm_package_version but fallback on the version written in the package.json in case the env var is missing for some reason.

3 people think this answer is useful

Why don’t use the require resolve…

const packageJson = path.dirname(require.resolve('package-name')) + '/package.json';
const { version } = require(packageJson);
console.log('version', version)



With this approach work for all sub paths 🙂

2 people think this answer is useful

The leanest way I found:

const { version } = JSON.parse(fs.readFileSync('./package.json'))



1 people think this answer is useful

I do this with findup-sync:

var findup = require('findup-sync');
var packagejson = require(findup('package.json'));
console.log(packagejson.version); // => '0.0.1'



1 people think this answer is useful

I know this isn’t the intent of the OP, but I just had to do this, so hope it helps the next person.

If you’re using docker-compose for your CI/CD process, you can get it this way!

version:
image: node:7-alpine
volumes:
- .:/usr/src/service/
working_dir: /usr/src/service/
command: ash -c "node -p \"require('./package.json').version.replace('\n', '')\""



for the image, you can use any node image. I use alpine because it is the smallest.

0 people think this answer is useful

Import your package.json file into your server.js or app.js and then access package.json properties into server file.

var package = require('./package.json');



package variable contains all the data in package.json.

0 people think this answer is useful

I made a useful code to get the parent module’s package.json

function loadParentPackageJson() {
if (!module.parent || !module.parent.filename) return null
let dir = path.dirname(module.parent.filename)
let maxDepth = 5
let packageJson = null
while (maxDepth > 0) {
const packageJsonPath = ${dir}/package.json const exists = existsSync(packageJsonPath) if (exists) { packageJson = require(packageJsonPath) break } dir = path.resolve(dir, '../') maxDepth-- } return packageJson }  ## The Answer 20 0 people think this answer is useful If using rollup, the rollup-plugin-replace plugin can be used to add the version without exposing package.json to the client. // rollup.config.js import pkg from './package.json'; import { terser } from "rollup-plugin-terser"; import resolve from 'rollup-plugin-node-resolve'; import commonJS from 'rollup-plugin-commonjs' import replace from 'rollup-plugin-replace'; export default { plugins: [ replace({ exclude: 'node_modules/**', 'MY_PACKAGE_JSON_VERSION': pkg.version, // will replace 'MY_PACKAGE_JSON_VERSION' with package.json version throughout source code }), ] };  Then, in the source code, anywhere where you want to have the package.json version, you would use the string ‘MY_PACKAGE_JSON_VERSION’. // src/index.js export const packageVersion = 'MY_PACKAGE_JSON_VERSION' // replaced with actual version number in rollup.config.js  ## The Answer 21 0 people think this answer is useful const { version } = require("./package.json"); console.log(version); const v = require("./package.json").version; console.log(v);  ## The Answer 22 0 people think this answer is useful I am using gitlab ci and want to automatically use the different versions to tag my docker images and push them. Now their default docker image does not include node so my version to do this in shell only is this scripts/getCurrentVersion.sh BASEDIR=$(dirname $0) cat$BASEDIR/../package.json | grep '"version"' | head -n 1 | awk '{print $2}' | sed 's/"//g; s/,//g'  Now what this does is 1. Print your package json 2. Search for the lines with “version” 3. Take only the first result 4. Replace ” and , Please not that i have my scripts in a subfolder with the according name in my repository. So if you don’t change$BASEDIR/../package.json to $BASEDIR/package.json Or if you want to be able to get major, minor and patch version I use this scripts/getCurrentVersion.sh VERSION_TYPE=$1
BASEDIR=$(dirname$0)
VERSION=$(cat$BASEDIR/../package.json | grep '"version"' | head -n 1 | awk '{print $2}' | sed 's/"//g; s/,//g') if [$VERSION_TYPE = "major" ]; then
echo $(echo$VERSION | awk -F "." '{print $1}' ) elif [$VERSION_TYPE = "minor" ]; then
echo $(echo$VERSION | awk -F "." '{print $1"."$2}' )
else
echo $VERSION fi  this way if your version was 1.2.3. Your output would look like this $ > sh ./getCurrentVersion.sh major
1

$> sh ./getCurrentVersion.sh minor 1.2$> sh ./getCurrentVersion.sh
1.2.3



Now the only thing you will have to make sure is that your package version will be the first time in package.json that key is used otherwise you’ll end up with the wrong version

npm -s run env echo '\$npm_package_version'