diff --git a/packages/generators/app/lib/utils/check-requirements.js b/packages/generators/app/lib/utils/check-requirements.js index abf3a0fdf0..8a6caa2373 100644 --- a/packages/generators/app/lib/utils/check-requirements.js +++ b/packages/generators/app/lib/utils/check-requirements.js @@ -1,26 +1,28 @@ 'use strict'; -const { red, green, bold } = require('chalk'); +const { red, green, bold, yellow } = require('chalk'); const semver = require('semver'); +const packageJSON = require('../resources/json/common/package.json'); module.exports = function checkBeforeInstall() { const currentNodeVersion = process.versions.node; - const minNodeVersion = '14.19.1'; // greater than or equal to this - const maxNodeVersion = '17.0.0'; // less than this + const { engines } = packageJSON({ strapiDependencies: [] }); - if ( - !semver.gte(currentNodeVersion, minNodeVersion) || - !semver.lt(currentNodeVersion, maxNodeVersion) - ) { - console.error(red(`You are running ${bold(`node ${currentNodeVersion}`)}`)); - console.error( - `Strapi requires ${bold(green(`node >=${minNodeVersion} and <${maxNodeVersion}`))}` - ); + // error if the node version isn't supported + if (!semver.satisfies(currentNodeVersion, engines.node)) { + console.error(red(`You are running ${bold(`Node.js ${currentNodeVersion}`)}`)); + console.error(`Strapi requires ${bold(green(`Node.js ${engines.node}`))}`); console.error('Please make sure to use the right version of Node.'); - } - - // only exit on lower version; higher version is allowed to proceed with only the warning - if (!semver.gte(currentNodeVersion, minNodeVersion)) { process.exit(1); } + + // warn if not using a LTS version + else if (!semver.satisfies(currentNodeVersion, '14.x.x || 16.x.x || 18.x.x || 20.x.x')) { + console.warn(yellow(`You are running ${bold(`Node.js ${currentNodeVersion}`)}`)); + console.warn( + `Strapi only supports ${bold( + green('LTS versions of Node.js') + )}, other versions may not be compatible.` + ); + } };