.
This commit is contained in:
+72
@@ -0,0 +1,72 @@
|
||||
import { yellow } from '../picocolors';
|
||||
import spawn from 'next/dist/compiled/cross-spawn';
|
||||
/**
|
||||
* Spawn a package manager installation with either npm, pnpm, or yarn.
|
||||
*
|
||||
* @returns A Promise that resolves once the installation is finished.
|
||||
*/ export function install(root, dependencies, { packageManager, isOnline, devDependencies }) {
|
||||
let args = [];
|
||||
if (dependencies.length > 0) {
|
||||
if (packageManager === 'yarn') {
|
||||
args = [
|
||||
'add',
|
||||
'--exact'
|
||||
];
|
||||
if (devDependencies) args.push('--dev');
|
||||
} else if (packageManager === 'pnpm') {
|
||||
args = [
|
||||
'add',
|
||||
'--save-exact'
|
||||
];
|
||||
args.push(devDependencies ? '--save-dev' : '--save-prod');
|
||||
} else {
|
||||
// npm
|
||||
args = [
|
||||
'install',
|
||||
'--save-exact'
|
||||
];
|
||||
args.push(devDependencies ? '--save-dev' : '--save');
|
||||
}
|
||||
args.push(...dependencies);
|
||||
} else {
|
||||
args = [
|
||||
'install'
|
||||
] // npm, pnpm, and yarn all support `install`
|
||||
;
|
||||
if (!isOnline) {
|
||||
args.push('--offline');
|
||||
console.log(yellow('You appear to be offline.'));
|
||||
if (packageManager !== 'npm') {
|
||||
console.log(yellow(`Falling back to the local ${packageManager} cache.`));
|
||||
}
|
||||
console.log();
|
||||
}
|
||||
}
|
||||
return new Promise((resolve, reject)=>{
|
||||
/**
|
||||
* Spawn the installation process.
|
||||
*/ const child = spawn(packageManager, args, {
|
||||
cwd: root,
|
||||
stdio: 'inherit',
|
||||
env: {
|
||||
...process.env,
|
||||
ADBLOCK: '1',
|
||||
// we set NODE_ENV to development as pnpm skips dev
|
||||
// dependencies when production
|
||||
NODE_ENV: 'development',
|
||||
DISABLE_OPENCOLLECTIVE: '1'
|
||||
}
|
||||
});
|
||||
child.on('close', (code)=>{
|
||||
if (code !== 0) {
|
||||
reject({
|
||||
command: `${packageManager} ${args.join(' ')}`
|
||||
});
|
||||
return;
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
//# sourceMappingURL=install.js.map
|
||||
Reference in New Issue
Block a user