fix(core): ensure yarn runs install with correct version (#17997)

This commit is contained in:
Miroslav Jonaš 2023-07-07 15:19:04 +02:00 committed by GitHub
parent 21007d8922
commit d0c37727c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 2 deletions

View File

@ -23,7 +23,7 @@ export async function createSandbox(packageManager: PackageManager) {
`Installing dependencies with ${packageManager}`
).start();
const { install } = getPackageManagerCommand(packageManager);
const { install, preInstall } = getPackageManagerCommand(packageManager);
const tmpDir = dirSync().name;
try {
@ -39,6 +39,10 @@ export async function createSandbox(packageManager: PackageManager) {
);
generatePackageManagerFiles(tmpDir, packageManager);
if (preInstall) {
await execAndWait(preInstall, tmpDir);
}
await execAndWait(install, tmpDir);
installSpinner.succeed();

View File

@ -36,6 +36,7 @@ export function getPackageManagerCommand(
): {
install: string;
exec: string;
preInstall?: string;
} {
const [pmMajor, pmMinor] =
getPackageManagerVersion(packageManager).split('.');
@ -45,6 +46,9 @@ export function getPackageManagerCommand(
const useBerry = +pmMajor >= 2;
const installCommand = 'yarn install --silent';
return {
preInstall: useBerry
? 'yarn set version stable'
: 'yarn set version classic',
install: useBerry
? installCommand
: `${installCommand} --ignore-scripts`,

View File

@ -464,12 +464,20 @@ export function ensurePackage<T extends any = any>(
console.log(`Fetching ${pkg}...`);
const packageManager = detectPackageManager();
const isVerbose = process.env.NX_VERBOSE_LOGGING === 'true';
const preInstallCommand = getPackageManagerCommand(packageManager).preInstall;
if (preInstallCommand) {
// ensure package.json and repo in tmp folder is set to a proper package manager state
execSync(preInstallCommand, {
cwd: tempDir,
stdio: isVerbose ? 'inherit' : 'ignore',
});
}
let addCommand = getPackageManagerCommand(packageManager).addDev;
if (packageManager === 'pnpm') {
addCommand = 'pnpm add -D'; // we need to ensure that we are not using workspace command
}
const isVerbose = process.env.NX_VERBOSE_LOGGING === 'true';
execSync(`${addCommand} ${pkg}@${requiredVersion}`, {
cwd: tempDir,
stdio: isVerbose ? 'inherit' : 'ignore',

View File

@ -15,6 +15,7 @@ const execAsync = promisify(exec);
export type PackageManager = 'yarn' | 'pnpm' | 'npm';
export interface PackageManagerCommands {
preInstall?: string;
install: string;
ciInstall: string;
add: string;
@ -64,6 +65,9 @@ export function getPackageManagerCommand(
const useBerry = gte(yarnVersion, '2.0.0');
return {
preInstall: useBerry
? 'yarn set version stable'
: 'yarn set version classic',
install: 'yarn',
ciInstall: useBerry
? 'yarn install --immutable'