How can I use variables in package.json?
node.jsNpmnode.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");
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