From 98f42e8995cfaf48a93449cd0ec3e7da8ed68ff4 Mon Sep 17 00:00:00 2001 From: Shahed Nasser Date: Tue, 6 Aug 2024 10:15:17 +0300 Subject: [PATCH] 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. --- packages/cli/create-medusa-app/package.json | 1 + packages/cli/create-medusa-app/src/commands/create.ts | 9 ++++++++- packages/cli/medusa-cli/src/commands/new.ts | 6 ++++++ packages/core/utils/src/common/get-node-version.ts | 7 +++++++ packages/core/utils/src/common/index.ts | 1 + yarn.lock | 1 + 6 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 packages/core/utils/src/common/get-node-version.ts diff --git a/packages/cli/create-medusa-app/package.json b/packages/cli/create-medusa-app/package.json index b9bd1e4323..b8aa4fff3b 100644 --- a/packages/cli/create-medusa-app/package.json +++ b/packages/cli/create-medusa-app/package.json @@ -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", diff --git a/packages/cli/create-medusa-app/src/commands/create.ts b/packages/cli/create-medusa-app/src/commands/create.ts index f36e1adcc0..724253f2e3 100644 --- a/packages/cli/create-medusa-app/src/commands/create.ts +++ b/packages/cli/create-medusa-app/src/commands/create.ts @@ -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() diff --git a/packages/cli/medusa-cli/src/commands/new.ts b/packages/cli/medusa-cli/src/commands/new.ts index 042859fa66..eb19cf3d8f 100644 --- a/packages/cli/medusa-cli/src/commands/new.ts +++ b/packages/cli/medusa-cli/src/commands/new.ts @@ -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 { diff --git a/packages/core/utils/src/common/get-node-version.ts b/packages/core/utils/src/common/get-node-version.ts new file mode 100644 index 0000000000..fa09891d5b --- /dev/null +++ b/packages/core/utils/src/common/get-node-version.ts @@ -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 \ No newline at end of file diff --git a/packages/core/utils/src/common/index.ts b/packages/core/utils/src/common/index.ts index 58901ad71a..1636a265d4 100644 --- a/packages/core/utils/src/common/index.ts +++ b/packages/core/utils/src/common/index.ts @@ -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" diff --git a/yarn.lock b/yarn.lock index 98de55aa47..e9295e78bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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