@tianyio/quality-helper
Version:
A comprehensive quality helper tool for project scaffolding and management
96 lines (95 loc) • 4.07 kB
JavaScript
import { join } from "path";
import ora from "ora";
import chalk from "chalk";
import { d as createDependencyValidator, c as createDependencyManager, e as cleanDependencies, i as installProjectDependencies } from "./utils-JjdnUrNK.js";
import { F as FileOperations } from "./core-file-ops-d43o99eg.js";
import { D as Discovery } from "./core-discovery-DU1aPJk0.js";
import { U as UIService } from "./services-DXX3cT7y.js";
async function updateDependencies() {
const { projectPath } = await Discovery.findProjectRoot();
if (!projectPath) {
throw new Error("未找到项目根目录(package.json)");
}
const uiService = new UIService();
const selectedFile = await uiService.selectDependencyFile(projectPath);
await updateToRecommendedVersions(projectPath, selectedFile);
}
async function updateToRecommendedVersions(projectRoot, customDependencyFile) {
const spinner = ora("正在更新依赖到推荐版本...").start();
try {
let dependencyManager = createDependencyManager();
if (customDependencyFile) {
spinner.text = "正在验证依赖列表文件...";
const validator = createDependencyValidator();
const validationResult = await validator.validateDependencyFile(customDependencyFile);
if (!validationResult.isValid) {
spinner.fail("依赖列表文件验证失败");
validator.printValidationResult(validationResult, customDependencyFile);
console.log(chalk.yellow("\n⚠️ 将使用项目默认依赖列表"));
dependencyManager = createDependencyManager();
} else {
spinner.succeed("依赖列表文件验证通过");
validator.printValidationResult(validationResult, customDependencyFile);
const customConfig = {};
if (validationResult.dependencies) {
customConfig.customDependencies = validationResult.dependencies;
}
if (validationResult.devDependencies) {
customConfig.customDevDependencies = validationResult.devDependencies;
}
dependencyManager = createDependencyManager(customConfig);
}
}
spinner.text = "正在分析依赖配置...";
const hasUpdates = await dependencyManager.updateToRecommendedVersions(projectRoot);
spinner.stop();
if (!hasUpdates) {
console.log(chalk.green("✅ 所有依赖已是最新版本"));
return;
}
const nodeModulesExists = await FileOperations.exists(join(projectRoot, "node_modules"));
if (nodeModulesExists) {
spinner.start("正在清理现有依赖...");
await cleanDependencies(projectRoot);
spinner.stop();
}
spinner.start("正在安装依赖...");
await installProjectDependencies(projectRoot);
spinner.succeed("依赖更新完成");
} catch (error) {
spinner.fail("依赖更新失败");
if (error.message?.includes("ERR_PNPM_INCLUDED_DEPS_CONFLICT")) {
console.log("\n💡 解决建议:");
console.log("1. 手动删除 node_modules 目录和 pnpm-lock.yaml 文件");
console.log('2. 运行 "pnpm install" 重新安装依赖');
console.log('3. 或者选择 "清理并重新安装" 选项');
}
throw error;
}
}
async function checkDependencies() {
const { projectPath } = await Discovery.findProjectRoot();
if (!projectPath) {
throw new Error("未找到项目根目录(package.json)");
}
await checkDependencyStatus(projectPath);
}
async function checkDependencyStatus(projectRoot) {
const spinner = ora("正在检查依赖状态...").start();
try {
const dependencyManager = createDependencyManager();
const analysis = await dependencyManager.analyzeDependencies(projectRoot);
spinner.stop();
dependencyManager.generateReport(analysis);
dependencyManager.checkCompatibility(analysis);
console.log('\n提示: 运行 "quality-helper update-deps" 更新依赖');
} catch (error) {
spinner.fail("依赖状态检查失败");
throw error;
}
}
export {
checkDependencies as c,
updateDependencies as u
};
//# sourceMappingURL=update-dependencies-DXfprxby.js.map