UNPKG

next-starter-setup

Version:

Next.js 16 + Tailwind v4 + GSAP + Lenis Starter using pnpm

91 lines (77 loc) 2.89 kB
#!/usr/bin/env node import { execSync } from "child_process"; import { cpSync } from "fs"; import path from "path"; import { fileURLToPath } from "url"; import prompts from "prompts"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const templateDir = path.join(__dirname, "templates", "basic"); /** * Detect user's preferred package manager (pnpm, yarn, or npm) */ function detectPackageManager() { const userAgent = process.env.npm_config_user_agent || ""; if (userAgent.includes("pnpm")) return "pnpm"; if (userAgent.includes("yarn")) return "yarn"; return "npm"; } /** * Return the right CLI command for each package manager */ function getCommands(manager, projectName) { switch (manager) { case "pnpm": return { create: `pnpm dlx create-next-app@latest ${projectName}`, install: `cd ${projectName} && pnpm add gsap lenis clsx`, dev: `pnpm dev`, }; case "yarn": return { create: `yarn create next-app ${projectName}`, install: `cd ${projectName} && yarn add gsap lenis clsx`, dev: `yarn dev`, }; default: return { create: `npx create-next-app@latest ${projectName}`, install: `cd ${projectName} && npm install gsap lenis clsx`, dev: `npm run dev`, }; } } async function main() { console.log("\n✨ Welcome to create-next-starter ✨\n"); // 🧠 Detect user's package manager const pkgManager = detectPackageManager(); console.log(`🧩 Detected package manager: ${pkgManager}\n`); // 📝 Ask for project name const { projectName } = await prompts({ type: "text", name: "projectName", message: "Project name:", initial: "my-next-app", }); const projectPath = path.resolve(process.cwd(), projectName); const commands = getCommands(pkgManager, projectName); console.log(`\n🚀 Creating Next.js 16 project: ${projectName}\n`); // 1️⃣ Create Next.js project (shows official Next.js setup wizard) execSync(commands.create, { stdio: "inherit" }); // 2️⃣ Install Lenis + GSAP with the detected package manager console.log("\n📦 Installing required packages...\n"); execSync(commands.install, { stdio: "inherit" }); // 3️⃣ Copy your starter template files console.log("\n🧩 Copying starter files...\n"); cpSync(templateDir, projectPath, { recursive: true }); // 4️⃣ Success output console.log(`✅ Basic Next.js starter created successfully!\n`); console.log(`Next steps:\n`); console.log(` cd ${projectName}`); console.log(` ${commands.dev}\n`); console.log("🔥 You're ready to roll with Next.js 16 + Tailwind + Lenis + GSAP!"); } main().catch((err) => { console.error("❌ Error:", err); process.exit(1); });