How to enforce node,npm versions in node project | Package.json engines example
This tutorial explains setting NODE and NPM versions in node projects
Multiple ways to define and enforce developers to use specific node and npm versions in different ways.
- using package.json
.npmrc
file
package.json engine to enforce node and npm versions in node projects
The engines
attribute in package.json tells the application to support only the specific node and npm version.
It tells the application to run on which version of node, npm, or yarn tools.
"engines": {
"node" : "node version",
"npm" : "npm version",
"yarn" : "yarn version"
"
}
The values of versions might contain exact matches or between ranges
The below combinations of node versions can be used
- ”node” :
">=18.0.0 <16.0.0"
- It tells to use node version between 16.0.0 and 18.0.0 inclusive only. - ”node” :
"~>18.0.0"
-tilde(~)
Use 18.0.0 or patch version such as 18.0.1 to 18.0.9 only. - ”node” :
"^18.0.0 "
-caret(^)
Use 18.0.0 or latest minor or patch version such as 18.0.1 to 18.9.9 only.
Examples of engines configuration in package.json
{
"engines": {
"node": ">=18.0.0 <16.0.0",
"npm": ">=9.0.0 <8.5.0"
}
}
Next, create .npmrc
to node project
add engine-strict=true
to this file
engine-strict=true
if you are running a node project with the node 15 version, engines contain 18 versions.
It throws an error npm WARN EBADENGINE Unsupported engine
while running npm commands such as npm install.
PS B:\work> npm install
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '[email protected]',
npm WARN EBADENGINE required: { node: '>=18.0.0 <16.0.0' },
npm WARN EBADENGINE current: { node: 'v15.12.0', npm: '6.1.2' }
npm WARN EBADENGINE }
Conclusion
Setting node versions at the project allows developers to restrict unsupported versions. This is useful in production deployments to the cloud such as Heroku, AWS and gcs using docker containers to avoid unsupported errors and warnings