Unsupported Engine Node / Npm Only When Building in Docker
I Have a Dependency in My Package. Json Which Itself Has the Following Dependency: "Node-Rdkafka": "^2.5.0", Using Nvm on My Local Machine and Setting My Node...
I have a dependency in my package.json which itself has the following dependency:
"node-rdkafka": "^2.5.0",
Using nvm on my local machine and setting my node version to 8.9.1, and my npm version is 5.5.1, I can successfully run
npm install [email protected]
But when running the same thing (i.e npm install) from within my docker image:
FROM node:10.13.0-alpine or FROM node:8.9.1-alpine
I get the following error:
npm ERR! notsup Unsupported engine for [email protected]: wanted: {"node":">=12.0.0"} (current: {"node":"10.13.0","npm":"6.4.1"})
npm ERR! notsup Not compatible with your version of node/npm: [email protected]
npm ERR! notsup Not compatible with your version of node/npm: [email protected]
npm ERR! notsup Required: {"node":">=12.0.0"}
npm ERR! notsup Actual: {"npm":"6.4.1","node":"10.13.0"}
Any ideas about this inconsistency?
I clearly dont need a node version this high. But it says I do.
3 Answers
Try to remove package-lock.json before npm install in Docker
rm package-lock.json
npm i
The engines property in the package.json allows us to establish a range of versions.
With >=12 is asking for a node with version 12 or greater.
Therefore, the solution would be to install the requested version:
FROM node:12
Anyway, I recommend reviewing the versions supported by Docker currently here.
When building old apps with a more recent nodejs, it might work perfectly fine to use older packages which had requirements on nodejs engine.
Karma package, for instance, has this requirement : required: { node: '0.10 || 0.12 || 4 || 5 || 6 || 7' }. But it works ok in nodejs 16.
In this case, there is a setting to transform EBADENGINE into a error or warning. It works in nodejs 16 at least.
Add or remove this line in your ~/.npmrc : engine-strict=true.
I added this flag following a tutorial, and didn't realize its impact until I wanted to build an older app.