49 lines
1.4 KiB
JavaScript
49 lines
1.4 KiB
JavaScript
const { execFileSync, spawn } = require("node:child_process");
|
|
const path = require("node:path");
|
|
|
|
function supportsNext(nodePath) {
|
|
try {
|
|
const version = execFileSync(nodePath, ["--version"], {
|
|
encoding: "utf8",
|
|
stdio: ["ignore", "pipe", "ignore"],
|
|
}).trim();
|
|
const [major, minor] = version.replace(/^v/, "").split(".").map(Number);
|
|
return major >= 20 || (major === 18 && minor >= 18) || (major === 19 && minor >= 8);
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function installedNodes() {
|
|
const command = process.platform === "win32" ? "where.exe" : "which";
|
|
const args = process.platform === "win32" ? ["node"] : ["-a", "node"];
|
|
|
|
try {
|
|
return execFileSync(command, args, { encoding: "utf8" })
|
|
.split(/\r?\n/)
|
|
.map((item) => item.trim())
|
|
.filter(Boolean);
|
|
} catch {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
const nodePath = [process.execPath, ...installedNodes()].find(supportsNext);
|
|
|
|
if (!nodePath) {
|
|
console.error("Next.js به Node.js 18.18 یا جدیدتر نیاز دارد. لطفاً Node.js LTS را نصب کنید.");
|
|
process.exit(1);
|
|
}
|
|
|
|
const nextCli = require.resolve("next/dist/bin/next");
|
|
const child = spawn(nodePath, [nextCli, "dev", ...process.argv.slice(2)], {
|
|
cwd: path.resolve(__dirname, ".."),
|
|
stdio: "inherit",
|
|
env: process.env,
|
|
});
|
|
|
|
child.on("exit", (code, signal) => {
|
|
if (signal) process.kill(process.pid, signal);
|
|
process.exit(code ?? 1);
|
|
});
|