How can I use variables in package.json?

There is a feature from maven I miss a lot in package.json. In maven .pom file you can define variables in parent project and use them in child project's pom files.

Is there something like this in npm? We are building modular project and I want to define dependency versions centrally and them to be used in respective package.json files.

Thanks


Solution 1:

Any property from package.json can be referenced from scripts, prefix it with $npm_package and adding an _<prop> (underscore + property) for every nested level.

Example:

{ 
  "name": "appname",
  "version": "0.0.1"
}

Here, name can be access like below:

Linux/Mac: $npm_package_name or ${npm_package_name}

Windows: %npm_package_name%


And, version can be access like below:

Linux/Mac: $npm_package_version or ${npm_package_version}

Windows: %npm_package_version%

Solution 2:

Define a config object in package.json:

{
    "name"   : "myapp",
    "config" : { "port" : "3000" },
    ...
}

And then you can access port value from scrips object with $npm_package_config_port

{
    "name"   : "myapp",
    "config" : { "port" : "3000" },
    "scripts": {
        "start" : "node --harmony app.js $npm_package_config_port"
    },
    ...
}

The source full article is here:

http://www.marcusoft.net/2015/08/npm-scripting-configs-and-arguments.html#npm-configuration

Solution 3:

On Windows, you should use %variable_name%. For example:

{
   "name": "app_name",
   "version": "1.0.0",
   "custom": {
      "key": "any value"
   }
}

You can get it using %npm_package_name%, %npm_package_version% and %npm_package_custom_key%.

Solution 4:

I import the package.json file as a variable into my node project to get the object structure instead of using $npm_package_name. This converts it from JSON to a JS Object

let package = require("./package.json");

enter image description here