fix: harden doctor install checks
This commit is contained in:
39
src/commands/doctor-install.ts
Normal file
39
src/commands/doctor-install.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
import { note } from "../terminal/note.js";
|
||||
|
||||
export function noteSourceInstallIssues(root: string | null) {
|
||||
if (!root) return;
|
||||
|
||||
const workspaceMarker = path.join(root, "pnpm-workspace.yaml");
|
||||
if (!fs.existsSync(workspaceMarker)) return;
|
||||
|
||||
const warnings: string[] = [];
|
||||
const nodeModules = path.join(root, "node_modules");
|
||||
const pnpmStore = path.join(nodeModules, ".pnpm");
|
||||
const tsxBin = path.join(nodeModules, ".bin", "tsx");
|
||||
const srcEntry = path.join(root, "src", "entry.ts");
|
||||
|
||||
if (fs.existsSync(nodeModules) && !fs.existsSync(pnpmStore)) {
|
||||
warnings.push(
|
||||
"- node_modules was not installed by pnpm (missing node_modules/.pnpm). Run: pnpm install",
|
||||
);
|
||||
}
|
||||
|
||||
if (fs.existsSync(path.join(root, "package-lock.json"))) {
|
||||
warnings.push(
|
||||
"- package-lock.json present in a pnpm workspace. If you ran npm install, remove it and reinstall with pnpm.",
|
||||
);
|
||||
}
|
||||
|
||||
if (fs.existsSync(srcEntry) && !fs.existsSync(tsxBin)) {
|
||||
warnings.push(
|
||||
"- tsx binary is missing for source runs. Run: pnpm install",
|
||||
);
|
||||
}
|
||||
|
||||
if (warnings.length > 0) {
|
||||
note(warnings.join("\n"), "Install");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user