How can I use variables in package.json?

node.jsNpm

node.js Problem Overview


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

node.js Solutions


Solution 1 - node.js

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 - node.js

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 - node.js

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 - node.js

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

Solution 5 - node.js

Took me a while to find my mistake:

I was running on powershell you have to use $env:npm_package_name or ${env:npm_package_name} there to access the variables.

Solution 6 - node.js

You can use ${npm_package_variable_attribute} to reference a variable inline with a string.

Here's an example copying a file with the package.json version (${npm_package_version}) as part of the filename:

{
  "name": "appname",
  "version": "1.2.0",
  "scripts": {
    "upload-versioned-file": "aws s3 cp ./myfile.zip s3://my-bucket/releases/myfile-v${npm_package_version}.zip",

This results in the file s3://my-bucket/releases/myfile-v1.2.0.zip

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionhusaytView Question on Stackoverflow
Solution 1 - node.jsAbhayView Answer on Stackoverflow
Solution 2 - node.jsJirikView Answer on Stackoverflow
Solution 3 - node.jsRenan GomesView Answer on Stackoverflow
Solution 4 - node.jsMike FlynnView Answer on Stackoverflow
Solution 5 - node.jsObjectNameView Answer on Stackoverflow
Solution 6 - node.jsrotarydialView Answer on Stackoverflow