diff --git a/src/cli-scripts/common.ts b/src/cli-scripts/common.ts index 9ddb73f..7f330ff 100644 --- a/src/cli-scripts/common.ts +++ b/src/cli-scripts/common.ts @@ -234,3 +234,16 @@ function formatHrTime(hrtime: any) { } return time.toFixed(2) + TIME_UNITS[index]; } + +export function getInstallCommand(npmClient: string): string { + switch (npmClient) { + case 'yarn': + case 'bun': + case 'pnpm': + return 'add'; + + case 'npm': + default: + return 'install'; + } +} diff --git a/src/cli-scripts/update.ts b/src/cli-scripts/update.ts index 6a29c2f..d7d4f02 100644 --- a/src/cli-scripts/update.ts +++ b/src/cli-scripts/update.ts @@ -3,7 +3,7 @@ import { copySync } from 'fs-extra'; import { join, isAbsolute, resolve, relative } from 'path'; import type { TaskInfoProvider, Plugin } from './common'; -import { getPlugins, readJSON, resolveElectronPlugin, runExec } from './common'; +import { getPlugins, readJSON, resolveElectronPlugin, runExec, getInstallCommand } from './common'; export async function doUpdate(taskInfoMessageProvider: TaskInfoProvider): Promise { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion @@ -108,11 +108,23 @@ export async function doUpdate(taskInfoMessageProvider: TaskInfoProvider): Promi usersProjectCapConfigFile = configFileOptions.json; configFileName = 'capacitor.config.json'; } - copySync(usersProjectCapConfigFile, join(usersProjectDir, 'electron', configFileName), { overwrite: true }); + + const usersProjectConfigFilePath = join(usersProjectDir, 'electron', configFileName); + + copySync(usersProjectCapConfigFile, usersProjectConfigFilePath, { overwrite: true }); if (npmIStr.length > 0) { taskInfoMessageProvider('installing electron plugin files'); console.log(`\n\nWill install:${npmIStr}\n\n`); - await runExec(`cd ${join(usersProjectDir, 'electron')} && npm i${npmIStr}`); + + const config = readJSON(usersProjectConfigFilePath); + + const npmClient = config.electron?.npmClient || 'npm'; + const installCommand = getInstallCommand(npmClient); + const registryCommand = config.electron?.registry ? ` --registry ${config.electron.registry}` : ''; + + await runExec( + `cd ${join(usersProjectDir, 'electron')} && ${npmClient} ${installCommand}${npmIStr}${registryCommand}` + ); } } diff --git a/src/electron-platform/definitions.ts b/src/electron-platform/definitions.ts index 012b8be..4e61582 100644 --- a/src/electron-platform/definitions.ts +++ b/src/electron-platform/definitions.ts @@ -22,6 +22,8 @@ export interface ElectronConfig { backgroundColor?: string; appId?: string; appName?: string; + npmClient?: string; + registry?: string; } export type CapacitorElectronConfig = CapacitorConfig & {