--- lib/update.js.orig	1985-10-26 08:15:00.000000000 +0000
+++ lib/update.js	2018-04-24 15:59:30.000000000 +0000
@@ -58,10 +58,17 @@
       if (url.parse(ww.req).protocol) ww.what = ww.req
 
       const where = (ww.dep.parent && ww.dep.parent.path) || ww.dep.path
-      const isTransitive = !(ww.dep.requiredBy || []).some((p) => p.isTop)
-      const key = where + ':' + String(isTransitive)
-      if (!toInstall[key]) toInstall[key] = {where: where, opts: {saveOnlyLock: isTransitive}, what: []}
-      if (toInstall[key].what.indexOf(ww.what) === -1) toInstall[key].what.push(ww.what)
+      if (ww.what.match(/^npm@/) && where.match(/@@NPM_PATH_JSREGEX@@/)) {
+        log.error("Trying to update '" + ww.what + "' in '" + where + "'")
+        log.error("which is part of the MacPorts npm base installation.")
+        log.error("To update npm please run:")
+        log.error("sudo port selfupdate && sudo port upgrade npm5\n")
+      } else {
+        const isTransitive = !(ww.dep.requiredBy || []).some((p) => p.isTop)
+        const key = where + ':' + String(isTransitive)
+        if (!toInstall[key]) toInstall[key] = {where: where, opts: {saveOnlyLock: isTransitive}, what: []}
+        if (toInstall[key].what.indexOf(ww.what) === -1) toInstall[key].what.push(ww.what)
+      }
     })
     return Bluebird.each(Object.keys(toInstall), (key) => {
       const deps = toInstall[key]
