UNPKG

node-version-use

Version:

Cross-platform solution for using multiple versions of node. Useful for compatibility testing

82 lines (81 loc) 2.92 kB
import exit from 'exit-compat'; import fs from 'fs'; import path from 'path'; import { rmSync } from '../compat.js'; import { storagePath } from '../constants.js'; import { findInstalledVersions, getAllInstalledVersions } from '../lib/findInstalledVersions.js'; /** * nvu uninstall <version> * * Remove an installed Node version. */ export default function uninstallCmd(args) { if (args.length === 0) { console.log('Usage: nvu uninstall <version>'); console.log('Example: nvu uninstall 20'); console.log(' nvu uninstall v20.19.6'); exit(1); return; } const version = args[0].trim(); const versionsPath = path.join(storagePath, 'installed'); // Find all matching installed versions const matches = findInstalledVersions(versionsPath, version); if (matches.length === 0) { console.log(`Node ${version} is not installed.`); console.log(''); console.log('Installed versions:'); listInstalledVersions(versionsPath); exit(1); return; } if (matches.length > 1) { console.log(`Multiple versions match "${version}":`); for(let i = 0; i < matches.length; i++){ console.log(` ${matches[i]}`); } console.log(''); console.log('Please specify the exact version to uninstall.'); exit(1); return; } const installedVersion = matches[0]; const versionPath = path.join(versionsPath, installedVersion); // Check if this is the current default (exact match since we store exact versions) const defaultPath = path.join(storagePath, 'default'); if (fs.existsSync(defaultPath)) { const defaultVersion = fs.readFileSync(defaultPath, 'utf8').trim(); // Normalize both for comparison const normalizedDefault = defaultVersion.replace(/^v/, ''); const normalizedInstalled = installedVersion.replace(/^v/, ''); if (normalizedInstalled === normalizedDefault) { console.error(`Cannot uninstall default version ${installedVersion}.`); console.error(''); console.error('Change your default first:'); console.error(' nvu default <version>'); exit(1); return; } } // Remove the version directory try { rmSync(versionPath); console.log(`Removed Node ${installedVersion}`); } catch (err) { console.error(`Failed to remove Node ${installedVersion}:`, err.message); exit(1); return; } exit(0); } /** * List installed versions for user reference */ function listInstalledVersions(versionsPath) { const versions = getAllInstalledVersions(versionsPath); if (versions.length === 0) { console.log(' (none)'); } else { for(let i = 0; i < versions.length; i++){ console.log(` ${versions[i]}`); } } }