next-starter-setup
Version:
Next.js 16 + Tailwind v4 + GSAP + Lenis Starter using pnpm
91 lines (77 loc) • 2.89 kB
JavaScript
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);
});