From 5f090afe3c761cf4ef40c989a5b5b44c66713020 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Tue, 14 Feb 2023 22:21:12 +0200 Subject: [PATCH] fix: use the default store and cache locations for pnpm --- scopes/dependencies/pnpm/lynx.ts | 16 ++++----- .../dependencies/pnpm/pnpm.package-manager.ts | 33 +++++-------------- 2 files changed, 16 insertions(+), 33 deletions(-) diff --git a/scopes/dependencies/pnpm/lynx.ts b/scopes/dependencies/pnpm/lynx.ts index 19fc6051a9c8..c5d305c8b450 100644 --- a/scopes/dependencies/pnpm/lynx.ts +++ b/scopes/dependencies/pnpm/lynx.ts @@ -30,7 +30,6 @@ import { createPkgGraph } from '@pnpm/workspace.pkgs-graph'; import { PackageManifest, ProjectManifest, ReadPackageHook } from '@pnpm/types'; import { Logger } from '@teambit/logger'; import toNerfDart from 'nerf-dart'; -import userHome from 'user-home'; import { pnpmErrorToBitError } from './pnpm-error-to-bit-error'; import { readConfig } from './read-config'; @@ -46,12 +45,12 @@ const STORE_CACHE: Record = {}; async function createStoreController( options: { rootDir: string; - storeDir: string; + storeDir?: string; cacheDir: string; registries: Registries; proxyConfig: PackageManagerProxyConfig; networkConfig: PackageManagerNetworkConfig; - } & Pick + } & Pick ): Promise<{ ctrl: StoreController; dir: string }> { const authConfig = getAuthConfig(options.registries); const opts: CreateStoreControllerOptions = { @@ -71,8 +70,8 @@ async function createStoreController( maxSockets: options.networkConfig.maxSockets, networkConcurrency: options.networkConfig.networkConcurrency, packageImportMethod: options.packageImportMethod, - pnpmHomeDir: path.join(userHome, '.pnpm'), // This is not actually used in our case resolveSymlinksInInjectedDirs: true, + pnpmHomeDir: options.pnpmHomeDir, }; // We should avoid the recreation of store. // The store holds cache that makes subsequent resolutions faster. @@ -120,14 +119,14 @@ async function generateResolverAndFetcher( export async function getPeerDependencyIssues( manifestsByPaths: Record, opts: { - storeDir: string; + storeDir?: string; cacheDir: string; registries: Registries; rootDir: string; proxyConfig: PackageManagerProxyConfig; networkConfig: PackageManagerNetworkConfig; overrides?: Record; - } & Pick + } & Pick ): Promise { const projects: ProjectOptions[] = []; const workspacePackages = {}; @@ -157,7 +156,7 @@ export async function getPeerDependencyIssues( export async function install( rootDir: string, manifestsByPaths: Record, - storeDir: string, + storeDir: string | undefined, cacheDir: string, registries: Registries, proxyConfig: PackageManagerProxyConfig = {}, @@ -172,7 +171,7 @@ export async function install( InstallOptions, 'publicHoistPattern' | 'hoistPattern' | 'nodeVersion' | 'engineStrict' | 'peerDependencyRules' > & - Pick, + Pick, // eslint-disable-next-line @typescript-eslint/no-unused-vars logger?: Logger ) { @@ -224,6 +223,7 @@ export async function install( proxyConfig, networkConfig, packageImportMethod: options?.packageImportMethod, + pnpmHomeDir: options?.pnpmHomeDir, }); const opts: InstallOptions = { allProjects, diff --git a/scopes/dependencies/pnpm/pnpm.package-manager.ts b/scopes/dependencies/pnpm/pnpm.package-manager.ts index 4d88f0bbf958..8ce4fcedfc54 100644 --- a/scopes/dependencies/pnpm/pnpm.package-manager.ts +++ b/scopes/dependencies/pnpm/pnpm.package-manager.ts @@ -18,28 +18,12 @@ import { PeerDependencyIssuesByProjects } from '@pnpm/core'; import { readModulesManifest } from '@pnpm/modules-yaml'; import { ProjectManifest } from '@pnpm/types'; import { join } from 'path'; -import userHome from 'user-home'; import { readConfig } from './read-config'; -const defaultStoreDir = join(userHome, '.pnpm-store'); -const defaultCacheDir = join(userHome, '.pnpm-cache'); - export class PnpmPackageManager implements PackageManager { private readConfig = memoize(readConfig); constructor(private depResolver: DependencyResolverMain, private logger: Logger) {} - async _getGlobalPnpmDirs( - opts: { - cacheRootDir?: string; - packageManagerConfigRootDir?: string; - } = {} - ) { - const { config } = await this.readConfig(opts.packageManagerConfigRootDir); - const storeDir = opts.cacheRootDir ? join(opts.cacheRootDir, '.pnpm-store') : config.storeDir ?? defaultStoreDir; - const cacheDir = opts.cacheRootDir ? join(opts.cacheRootDir, '.pnpm-cache') : config.cacheDir ?? defaultCacheDir; - return { storeDir, cacheDir }; - } - async install( { rootDir, manifests }: InstallationContext, installOptions: PackageManagerInstallOptions = {} @@ -56,7 +40,6 @@ export class PnpmPackageManager implements PackageManager { const registries = await this.depResolver.getRegistries(); const proxyConfig = await this.depResolver.getProxyConfig(); const networkConfig = await this.depResolver.getNetworkConfig(); - const { storeDir, cacheDir } = await this._getGlobalPnpmDirs(installOptions); const { config } = await this.readConfig(installOptions.packageManagerConfigRootDir); if (!installOptions.useNesting) { manifests = await extendWithComponentsFromDir(rootDir, manifests); @@ -64,8 +47,8 @@ export class PnpmPackageManager implements PackageManager { await install( rootDir, manifests, - storeDir, - cacheDir, + config.storeDir, + config.cacheDir, registries, proxyConfig, networkConfig, @@ -83,6 +66,7 @@ export class PnpmPackageManager implements PackageManager { peerDependencyRules: installOptions.peerDependencyRules, sideEffectsCacheRead: installOptions.sideEffectsCache ?? true, sideEffectsCacheWrite: installOptions.sideEffectsCache ?? true, + pnpmHomeDir: config.pnpmHomeDir, }, this.logger ); @@ -97,17 +81,16 @@ export class PnpmPackageManager implements PackageManager { manifests: Record, installOptions: PackageManagerInstallOptions = {} ): Promise { - const { storeDir, cacheDir } = await this._getGlobalPnpmDirs(installOptions); const proxyConfig = await this.depResolver.getProxyConfig(); const networkConfig = await this.depResolver.getNetworkConfig(); const registries = await this.depResolver.getRegistries(); // require it dynamically for performance purpose. the pnpm package require many files - do not move to static import // eslint-disable-next-line global-require, import/no-dynamic-require const lynx = require('./lynx'); - const { config } = await this.readConfig(); + const { config } = await this.readConfig(installOptions.packageManagerConfigRootDir); return lynx.getPeerDependencyIssues(manifests, { - storeDir, - cacheDir, + storeDir: config.storeDir, + cacheDir: config.cacheDir, proxyConfig, registries, rootDir, @@ -124,11 +107,11 @@ export class PnpmPackageManager implements PackageManager { // require it dynamically for performance purpose. the pnpm package require many files - do not move to static import // eslint-disable-next-line global-require, import/no-dynamic-require const { resolveRemoteVersion } = require('./lynx'); - const { cacheDir } = await this._getGlobalPnpmDirs(options); const registries = await this.depResolver.getRegistries(); const proxyConfig = await this.depResolver.getProxyConfig(); const networkConfig = await this.depResolver.getNetworkConfig(); - return resolveRemoteVersion(packageName, options.rootDir, cacheDir, registries, proxyConfig, networkConfig); + const { config } = await this.readConfig(options.packageManagerConfigRootDir); + return resolveRemoteVersion(packageName, options.rootDir, config.cacheDir, registries, proxyConfig, networkConfig); } async getProxyConfig?(): Promise {