in packages/plugin-block/src/dep.ts [68:144]
export async function installBlockDeps(param: DepsArgs) {
const { projectPkg, cwd, spinner, args, ctx, npmClient } = param;
const { dryRun } = args;
const {
conflicts,
lacks,
devConflicts,
devLacks
} = dependenciesConflictCheck(
ctx.pkg.dependencies,
projectPkg.dependencies,
ctx.pkg.devDependencies,
projectPkg.devDependencies,
);
debug(`conflictDeps ${conflicts}, lackDeps ${lacks}`, `devConflictDeps ${devConflicts}, devLackDeps ${devLacks}`);
// find confilict dependencies throw error
const allConflicts = [
...conflicts,
...devConflicts,
];
if (allConflicts.length) {
throw new Error(getErrors(allConflicts));
}
// find lack confilict, auto install
if (dryRun) {
debug(DEBUG_TAG, 'dryRun is true, skip install dependencies');
} else {
if (lacks.length) {
const deps = lacks.map((dep: string[]) => `${dep[0]}@${dep[1]}`);
spinner.start(
`Install additional dependencies ${deps.join(',')} with ${npmClient}`,
);
try {
await execa(
npmClient,
npmClient.includes('yarn')
? ['add', ...deps]
: ['install', ...deps, '--save'],
{ cwd },
);
} catch (e) {
spinner.fail();
throw new Error(e);
}
spinner.succeed();
}
if (devLacks.length) {
// need skip devDependency which already install in dependencies
const devDeps = devLacks
.filter(dep => !lacks.find(item => item[0] === dep[0]))
.map(dep => `${dep[0]}@${dep[1]}`);
spinner.start(
`Install additional devDependencies ${devDeps.join(',')} with ${npmClient}`,
);
try {
await execa(
npmClient,
npmClient.includes('yarn')
? ['add', ...devDeps, '--dev']
: ['install', ...devDeps, '--save-dev'],
{
cwd
},
);
} catch (e) {
spinner.fail();
throw new Error(e);
}
spinner.succeed();
}
}
}