feat(create-medusa-app, medusa): check Node.js version before installation. (#8452)

Check before installation with `create-medusa-app` and `medusa new` whether the current node version is >= 20. If not, exit with an error.
This commit is contained in:
Shahed Nasser
2024-08-06 10:15:17 +03:00
committed by GitHub
parent 413e29837c
commit 98f42e8995
6 changed files with 24 additions and 1 deletions

View File

@@ -14,6 +14,7 @@
"prepublishOnly": "cross-env NODE_ENV=production tsc --build"
},
"dependencies": {
"@medusajs/utils": "^1.11.9",
"boxen": "^5",
"chalk": "^5.2.0",
"commander": "^10.0.1",

View File

@@ -9,7 +9,6 @@ import waitOn from "wait-on"
import ora, { Ora } from "ora"
import fs from "fs"
import path from "path"
import isEmailImported from "validator/lib/isEmail.js"
import logMessage from "../utils/log-message.js"
import createAbortController, {
isAbortError,
@@ -27,6 +26,7 @@ import {
installNextjsStarter,
startNextjsStarter,
} from "../utils/nextjs-utils.js"
import { getNodeVersion, MIN_SUPPORTED_NODE_VERSION } from "@medusajs/utils"
const slugify = slugifyType.default
@@ -53,6 +53,13 @@ export default async ({
withNextjsStarter = false,
verbose = false,
}: CreateOptions) => {
const nodeVersion = getNodeVersion()
if (nodeVersion < MIN_SUPPORTED_NODE_VERSION) {
logMessage({
message: `Medusa requires at least v20 of Node.js. You're using v${nodeVersion}. Please install at least v20 and try again: https://nodejs.org/en/download`,
type: "error"
})
}
track("CREATE_CLI_CMA")
const spinner: Ora = ora()

View File

@@ -21,6 +21,7 @@ import { getPackageManager, setPackageManager } from "../util/package-manager"
import { PanicId } from "../reporter/panic-handler"
import { clearProject } from "../util/clear-project"
import path from "path"
import { getNodeVersion, MIN_SUPPORTED_NODE_VERSION } from "@medusajs/utils"
const removeUndefined = (obj) => {
return Object.fromEntries(
@@ -512,6 +513,11 @@ const attemptSeed = async (rootPath) => {
* Main function that clones or copies the starter.
*/
export const newStarter = async (args) => {
const nodeVersion = getNodeVersion()
if (nodeVersion < MIN_SUPPORTED_NODE_VERSION) {
reporter.error(`Medusa requires at least v20 of Node.js. You're using v${nodeVersion}. Please install at least v20 and try again: https://nodejs.org/en/download`)
process.exit(1)
}
track("CLI_NEW")
const {

View File

@@ -0,0 +1,7 @@
export function getNodeVersion(): number {
const [major] = process.versions.node.split('.').map(Number)
return major
}
export const MIN_SUPPORTED_NODE_VERSION = 20

View File

@@ -20,6 +20,7 @@ export * from "./get-caller-file-path"
export * from "./get-config-file"
export * from "./get-duplicates"
export * from "./get-iso-string-from-date"
export * from "./get-node-version"
export * from "./get-selects-and-relations-from-object-array"
export * from "./get-set-difference"
export * from "./graceful-shutdown-server"

View File

@@ -15470,6 +15470,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "create-medusa-app@workspace:packages/cli/create-medusa-app"
dependencies:
"@medusajs/utils": ^1.11.9
"@types/chalk": ^2.2.0
"@types/commander": ^2.12.2
"@types/configstore": ^6.0.0