@wdio/cli
Version:
WebdriverIO testrunner command line interface
40 lines (39 loc) • 1.29 kB
JavaScript
import { execa } from 'execa';
// @ts-expect-error // @ts-expect-error https://github.com/egoist/detect-package-manager/pull/6
import { detect } from 'detect-package-manager';
const installCommand = {
npm: 'install',
pnpm: 'add',
yarn: 'add',
bun: 'install'
};
const devFlag = {
npm: '--save-dev',
pnpm: '--save-dev',
yarn: '--dev',
bun: '--dev'
};
export async function installPackages(cwd, packages, dev) {
const pm = await detect({ cwd });
const devParam = dev ? devFlag[pm] : '';
console.log('\n');
const p = execa(pm, [installCommand[pm], ...packages, devParam], {
cwd,
stdout: process.stdout,
stderr: process.stderr
});
const { stdout, stderr, exitCode } = await p;
if (exitCode !== 0) {
const cmd = getInstallCommand(pm, packages, dev);
const customError = ('⚠️ An unknown error happened! Please retry ' +
`installing dependencies via "${cmd}"\n\n` +
`Error: ${stderr || stdout || 'unknown'}`);
console.error(customError);
return false;
}
return true;
}
export function getInstallCommand(pm, packages, dev) {
const devParam = dev ? devFlag[pm] : '';
return `${pm} ${installCommand[pm]} ${packages.join(' ')} ${devParam}`;
}