




















@@ -60,6 +60,17 @@ async function pathExists(targetPath: string): Promise<boolean> {
6060}
6161}
626263+async function removePathBestEffort(targetPath: string): Promise<void> {
64+await fs
65+.rm(targetPath, {
66+recursive: true,
67+force: true,
68+maxRetries: process.platform === "win32" ? 5 : 2,
69+retryDelay: 100,
70+})
71+.catch(() => undefined);
72+}
73+6374async function readPackageVersionIfPresent(packageRoot: string | null): Promise<string | null> {
6475if (!packageRoot) {
6576return null;
@@ -129,12 +140,12 @@ async function cleanupStagedNpmInstall(stage: StagedNpmInstall | null): Promise<
129140if (!stage) {
130141return;
131142}
132-await fs.rm(stage.prefix, { recursive: true, force: true }).catch(() => undefined);
143+await removePathBestEffort(stage.prefix);
133144}
134145135146async function copyPathEntry(source: string, destination: string): Promise<void> {
136147const stat = await fs.lstat(source);
137-await fs.rm(destination, { recursive: true, force: true }).catch(() => undefined);
148+await removePathBestEffort(destination);
138149if (stat.isSymbolicLink()) {
139150await fs.symlink(await fs.readlink(source), destination);
140151return;
@@ -201,15 +212,15 @@ async function replaceNpmBinShims(params: {
201212await restoreNpmBinShimBackup(backup);
202213throw err;
203214} finally {
204-await fs.rm(backup.backupDir, { recursive: true, force: true }).catch(() => undefined);
215+await removePathBestEffort(backup.backupDir);
205216}
206217}
207218208219async function restoreNpmBinShimBackup(backup: NpmBinShimBackup): Promise<void> {
209220await fs.mkdir(backup.targetBinDir, { recursive: true });
210221for (const entry of backup.entries) {
211222const destination = path.join(backup.targetBinDir, entry.name);
212-await fs.rm(destination, { recursive: true, force: true }).catch(() => undefined);
223+await removePathBestEffort(destination);
213224if (entry.hadExisting) {
214225await copyPathEntry(path.join(backup.backupDir, entry.name), destination);
215226}
@@ -253,7 +264,7 @@ async function swapStagedNpmInstall(params: {
253264packageName: params.packageName,
254265});
255266if (movedExisting) {
256-await fs.rm(backupRoot, { recursive: true, force: true });
267+await removePathBestEffort(backupRoot);
257268}
258269return {
259270name: "global install swap",
@@ -268,7 +279,7 @@ async function swapStagedNpmInstall(params: {
268279};
269280} catch (err) {
270281if (movedStaged) {
271-await fs.rm(targetPackageRoot, { recursive: true, force: true }).catch(() => undefined);
282+await removePathBestEffort(targetPackageRoot);
272283}
273284if (movedExisting) {
274285await fs.rename(backupRoot, targetPackageRoot).catch(() => undefined);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。