diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js
index d11118345f8d3bb9cd5cb1576e97ec83875c0f86..1f6f5f5674d263b46348564e2d2c9c4d533111a3 100644
--- a/lib/manager/npm/extract/index.js
+++ b/lib/manager/npm/extract/index.js
@@ -110,13 +110,23 @@ async function extractDependencies(content, packageFile, config) {
           };
           // TODO: do we need to remove the equals?
           dep.currentVersion = version.trim().replace(/^=/, '');
-          if (dep.currentVersion.startsWith('file:')) {
+          if (depType === 'engines') {
+            if (depName === 'node') {
+              dep.purl = 'pkg:github/nodejs/node?clean=true';
+            } else if (depName === 'yarn') {
+              dep.purl = 'pkg:github/yarnpkg/yarn?clean=true';
+              dep.commitMessageTopic = 'Yarn';
+            } else if (depName === 'npm') {
+              dep.purl = 'pkg:github/npm/npm?clean=true';
+              dep.commitMessageTopic = 'npm';
+            } else {
+              dep.skipReason = 'unknown-engines';
+            }
+            if (!semver.isValid(dep.currentVersion)) {
+              dep.skipReason = 'unknown-version';
+            }
+          } else if (dep.currentVersion.startsWith('file:')) {
             dep.skipReason = 'file';
-          } else if (depType === 'engines' && depName === 'node') {
-            dep.purl = 'pkg:github/nodejs/node?clean=true';
-          } else if (depType === 'engines' && depName === 'yarn') {
-            dep.purl = 'pkg:github/yarnpkg/yarn?clean=true';
-            dep.commitMessageTopic = 'Yarn';
           } else if (semver.isValid(dep.currentVersion)) {
             dep.purl = `pkg:npm/${depName.replace('@', '%40')}`;
             if (dep.currentVersion === '*') {
diff --git a/test/manager/npm/extract/__snapshots__/index.spec.js.snap b/test/manager/npm/extract/__snapshots__/index.spec.js.snap
index 4e090bbc9eaf81658cac4484291c238709656b1a..70f912d939d299eb599c1735e93ca0bb19f34b4e 100644
--- a/test/manager/npm/extract/__snapshots__/index.spec.js.snap
+++ b/test/manager/npm/extract/__snapshots__/index.spec.js.snap
@@ -34,6 +34,12 @@ Object {
       "depType": "devDependencies",
       "skipReason": "unknown-version",
     },
+    Object {
+      "currentVersion": ">=1.7.0 <2.0.0",
+      "depName": "atom",
+      "depType": "engines",
+      "skipReason": "unknown-engines",
+    },
     Object {
       "commitMessageTopic": "Node.js",
       "currentVersion": ">= 8.9.2",
@@ -44,12 +50,20 @@ Object {
       },
       "purl": "pkg:github/nodejs/node?clean=true",
     },
+    Object {
+      "commitMessageTopic": "npm",
+      "currentVersion": "^8.0.0",
+      "depName": "npm",
+      "depType": "engines",
+      "purl": "pkg:github/npm/npm?clean=true",
+    },
     Object {
       "commitMessageTopic": "Yarn",
-      "currentVersion": "1.7.0",
+      "currentVersion": "disabled",
       "depName": "yarn",
       "depType": "engines",
       "purl": "pkg:github/yarnpkg/yarn?clean=true",
+      "skipReason": "unknown-version",
     },
   ],
   "lernaClient": undefined,
diff --git a/test/manager/npm/extract/index.spec.js b/test/manager/npm/extract/index.spec.js
index f86f496b24cfe2965a414ad5f247b36011fb9cf9..7ecd8b02961dfa9a76563834a93aba23e0f85716 100644
--- a/test/manager/npm/extract/index.spec.js
+++ b/test/manager/npm/extract/index.spec.js
@@ -131,8 +131,10 @@ describe('manager/npm/extract', () => {
           other: 'latest',
         },
         engines: {
+          atom: '>=1.7.0 <2.0.0',
           node: '>= 8.9.2',
-          yarn: '1.7.0',
+          npm: '^8.0.0',
+          yarn: 'disabled',
         },
       };
       const pJsonStr = JSON.stringify(pJson);