diff --git a/packages/cli/src/utils/backupPackageFile.ts b/packages/cli/src/utils/backupPackageFile.ts new file mode 100644 index 000000000..ca91cc160 --- /dev/null +++ b/packages/cli/src/utils/backupPackageFile.ts @@ -0,0 +1,51 @@ +import fs from 'fs'; +import path from 'path'; + +export const backupFile = (runtimeSource: string, file: string) => { + const filePath = path.join(runtimeSource, file); + + if (fs.existsSync(filePath)) { + fs.copyFileSync(filePath, `${filePath}.bak`); + } +}; + +export const backupPnpmLock = (runtimeSource: string) => backupFile(runtimeSource, 'pnpm-lock.yaml'); +export const backupYarnLock = (runtimeSource: string) => backupFile(runtimeSource, 'yarn-lock.json'); +export const backupNpmLock = (runtimeSource: string) => backupFile(runtimeSource, 'package-lock.json'); +export const backupPackageJson = (runtimeSource: string) => backupFile(runtimeSource, 'package.json'); + +export const backupLock = (runtimeSource: string, npmType: string) => { + if (npmType === 'pnpm') { + backupPnpmLock(runtimeSource); + } else if (npmType === 'yarn') { + backupYarnLock(runtimeSource); + } + if (npmType === 'npm') { + backupNpmLock(runtimeSource); + } +}; + +export const restoreFile = (runtimeSource: string, file: string) => { + const filePath = path.join(runtimeSource, file); + + if (fs.existsSync(filePath)) { + fs.unlinkSync(filePath); + fs.renameSync(`${filePath}.bak`, filePath); + } +}; + +export const restorePnpmLock = (runtimeSource: string) => restoreFile(runtimeSource, 'pnpm-lock.yaml'); +export const restoreYarnLock = (runtimeSource: string) => restoreFile(runtimeSource, 'yarn-lock.json'); +export const restoreNpmLock = (runtimeSource: string) => restoreFile(runtimeSource, 'package-lock.json'); +export const restorePackageJson = (runtimeSource: string) => restoreFile(runtimeSource, 'package.json'); + +export const restoreLock = (runtimeSource: string, npmType: string) => { + if (npmType === 'pnpm') { + restorePnpmLock(runtimeSource); + } else if (npmType === 'yarn') { + restoreYarnLock(runtimeSource); + } + if (npmType === 'npm') { + restoreNpmLock(runtimeSource); + } +}; diff --git a/packages/cli/src/utils/index.ts b/packages/cli/src/utils/index.ts index 06db1cafe..ffe0a9768 100644 --- a/packages/cli/src/utils/index.ts +++ b/packages/cli/src/utils/index.ts @@ -3,3 +3,4 @@ export * from './defineUserConfig'; export * from './loadUserConfig'; export * from './prepareEntryFile'; export * from './resolveAppPackages'; +export * from './backupPackageFile'; diff --git a/packages/cli/src/utils/resolveAppPackages.ts b/packages/cli/src/utils/resolveAppPackages.ts index b64aa8e1d..003e5e0f3 100644 --- a/packages/cli/src/utils/resolveAppPackages.ts +++ b/packages/cli/src/utils/resolveAppPackages.ts @@ -8,6 +8,7 @@ import * as recast from 'recast'; import type App from '../Core'; import { EntryType, ModuleMainFilePath, NpmConfig, PackageType } from '../types'; +import { backupLock, backupPackageJson, restoreLock, restorePackageJson } from './backupPackageFile'; import { error, execInfo, info } from './logger'; type Ast = any; @@ -549,18 +550,13 @@ export const resolveAppPackages = (app: App): ModuleMainFilePath => { if (!npmConfig.keepPackageJsonClean) { npmInstall(dependencies, source, npmConfig); } else { - const packageFile = path.join(source, 'package.json'); - const packageBakFile = path.join(source, 'package.json.bak'); - if (fs.existsSync(packageFile)) { - fs.copyFileSync(packageFile, packageBakFile); - } + backupLock(source, npmConfig.client || 'npm'); + backupPackageJson(source); npmInstall(dependencies, source, npmConfig); - if (fs.existsSync(packageBakFile)) { - fs.unlinkSync(packageFile); - fs.renameSync(packageBakFile, packageFile); - } + restoreLock(source, npmConfig.client || 'npm'); + restorePackageJson(source); } }