create-quickstart-app
Version:
CLI tool to generate Next.js projects with various configurations
69 lines (61 loc) • 1.58 kB
text/typescript
import { execa } from "execa";
import { execSync } from "child_process";
import { GlobalOptions } from "../types/index.js";
import { createSpinner } from "../utils/spinner.js";
import { logger } from "../utils/logger.js";
let globalOptions: GlobalOptions;
export async function createNextProject(
options: GlobalOptions
): Promise<string> {
const {
projectName,
language,
useClerk,
orm,
database,
initGit,
installDeps,
useSrcDir,
useTemplates,
templates,
} = options;
globalOptions = {
projectName,
language,
useClerk,
orm,
database,
initGit,
installDeps,
useSrcDir,
useTemplates,
templates,
};
const spinner = createSpinner("Creating Next.js project...");
const args = [
"create-next-app@latest",
projectName,
"--use-npm",
"--eslint",
language === "TypeScript" ? "--ts" : "--js",
"--tailwind",
"--app",
useSrcDir ? "--src-dir" : "--no-src-dir",
"--turbopack",
"--import-alias=@",
"--skip-questions",
];
try {
// logger.info("\nRunning command: " + `npx ${args.join(" ")}`);
execSync(`npx ${args.join(" ")}`, { stdio: "inherit" });
spinner.succeed("Next.js project created successfully");
return projectName;
} catch (error) {
spinner.fail("Failed to create Next.js project");
logger.error("Error creating Next.js project", error);
throw error;
}
}
export function getGlobalOptions(): GlobalOptions {
return globalOptions;
}