setup-next-project
Version:
CLI to quickly create a pre-configured Next.js project with modular components and features
80 lines • 2.35 kB
JavaScript
import { exec } from "child_process";
import fs from "fs-extra";
import * as path from "path";
import { promisify } from "util";
const execAsync = promisify(exec);
/**
* Détecte le gestionnaire de paquets disponible sur le système
*/
export async function detectPackageManager() {
// Vérifier pnpm en premier
try {
const { stdout } = await execAsync("pnpm --version");
return {
name: "pnpm",
version: stdout.trim(),
installCommand: "pnpm install",
runCommand: "pnpm",
};
}
catch {
// pnpm n'est pas disponible
}
// Vérifier yarn
try {
const { stdout } = await execAsync("yarn --version");
return {
name: "yarn",
version: stdout.trim(),
installCommand: "yarn install",
runCommand: "yarn",
};
}
catch {
// yarn n'est pas disponible
}
// Fallback vers npm (toujours disponible avec Node.js)
try {
const { stdout } = await execAsync("npm --version");
return {
name: "npm",
version: stdout.trim(),
installCommand: "npm install",
runCommand: "npm run",
};
}
catch {
// Si même npm n'est pas disponible, quelque chose ne va pas
throw new Error("Aucun gestionnaire de paquets détecté (npm, yarn, pnpm)");
}
}
/**
* Détecte le gestionnaire de paquets utilisé dans le projet courant
* basé sur les fichiers de lock présents
*/
export function detectProjectPackageManager(projectPath) {
if (fs.existsSync(path.join(projectPath, "pnpm-lock.yaml"))) {
return "pnpm";
}
if (fs.existsSync(path.join(projectPath, "yarn.lock"))) {
return "yarn";
}
if (fs.existsSync(path.join(projectPath, "package-lock.json"))) {
return "npm";
}
// Par défaut, utiliser le gestionnaire détecté sur le système
return "npm";
}
/**
* Execute une commande dans un répertoire spécifique
*/
export async function runCommand(command, cwd) {
try {
const { stdout } = await execAsync(command, { cwd });
return stdout;
}
catch (error) {
throw new Error(`Erreur lors de l'exécution de "${command}": ${error.message}`);
}
}
//# sourceMappingURL=packageManager.js.map