-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
npm: Detect unsupported Node.js versions and warn
Also error on really old versions where we know we can't work. Credit: @iarna Reviewed-By: @othiym23 Reviewed-By: @zkat PR-URL: npm/npm#14230
- Loading branch information
Showing
4 changed files
with
82 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
'use strict' | ||
var semver = require('semver') | ||
var supportedNode = '0.10 || 0.12 || >= 4' | ||
var knownBroken = '>=0.1 <=0.7' | ||
|
||
var checkVersion = exports.checkVersion = function (version) { | ||
var versionNoPrerelease = version.replace(/-.*$/, '') | ||
return { | ||
broken: semver.satisfies(versionNoPrerelease, knownBroken), | ||
unsupported: !semver.satisfies(versionNoPrerelease, supportedNode) | ||
} | ||
} | ||
|
||
exports.checkForBrokenNode = function () { | ||
var nodejs = checkVersion(process.version) | ||
if (nodejs.broken) { | ||
console.error('ERROR: npm is known not to run on Node.js ' + process.version) | ||
console.error("You'll need to upgrade to a newer version in order to use this") | ||
console.error('version of npm. You can find the latest version at https://nodejs.org/') | ||
process.exit(1) | ||
} | ||
} | ||
|
||
exports.checkForUnsupportedNode = function () { | ||
var nodejs = checkVersion(process.version) | ||
if (nodejs.unsupported) { | ||
var log = require('npmlog') | ||
log.warn('npm', 'npm does not support Node.js ' + process.version) | ||
log.warn('npm', 'You should probably upgrade to a newer version of node as we') | ||
log.warn('npm', "can't make any promises that npm will work with this version.") | ||
log.warn('npm', 'You can find the latest version at https://nodejs.org/') | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
'use strict' | ||
var test = require('tap').test | ||
var unsupported = require('../../lib/utils/unsupported.js') | ||
|
||
var versions = [ | ||
// broken unsupported | ||
['v0.1.103', true, true], | ||
['v0.2.0', true, true], | ||
['v0.3.5', true, true], | ||
['v0.4.7', true, true], | ||
['v0.5.3', true, true], | ||
['v0.6.17', true, true], | ||
['v0.7.8', true, true], | ||
['v0.8.28', false, true], | ||
['v0.9.6', false, true], | ||
['v0.10.48', false, false], | ||
['v0.11.16', false, true], | ||
['v0.12.9', false, false], | ||
['v1.0.1', false, true], | ||
['v1.6.0', false, true], | ||
['v2.3.1', false, true], | ||
['v3.0.0', false, true], | ||
['v4.5.0', false, false], | ||
['v5.7.1', false, false], | ||
['v6.8.1', false, false], | ||
['v7.0.0-beta23', false, false], | ||
['v7.2.3', false, false] | ||
] | ||
|
||
test('versions', function (t) { | ||
t.plan(versions.length * 2) | ||
versions.forEach(function (verinfo) { | ||
var version = verinfo[0] | ||
var broken = verinfo[1] | ||
var unsupp = verinfo[2] | ||
var nodejs = unsupported.checkVersion(version) | ||
t.is(nodejs.broken, broken, version + ' ' + (broken ? '' : 'not ') + 'broken') | ||
t.is(nodejs.unsupported, unsupp, version + ' ' + (unsupp ? 'unsupported' : 'supported')) | ||
}) | ||
t.done() | ||
}) |