mirror of
https://github.com/pnpm/pnpm.git
synced 2026-05-24 08:35:19 -04:00
feat(core): add a disableRelinkFromStore option (#7075)
This commit is contained in:
12
.changeset/beige-otters-wonder.md
Normal file
12
.changeset/beige-otters-wonder.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
"@pnpm/store-connection-manager": minor
|
||||||
|
"@pnpm/store-controller-types": minor
|
||||||
|
"@pnpm/fs.indexed-pkg-importer": minor
|
||||||
|
"@pnpm/create-cafs-store": minor
|
||||||
|
"@pnpm/headless": minor
|
||||||
|
"@pnpm/core": minor
|
||||||
|
"@pnpm/cafs-types": minor
|
||||||
|
"@pnpm/worker": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
New option added: disableRelinkFromStore.
|
||||||
@@ -119,7 +119,6 @@ export interface Config {
|
|||||||
fetchingConcurrency?: number
|
fetchingConcurrency?: number
|
||||||
lockfileOnly?: boolean // like npm's --package-lock-only
|
lockfileOnly?: boolean // like npm's --package-lock-only
|
||||||
childConcurrency?: number
|
childConcurrency?: number
|
||||||
repeatInstallDepth?: number
|
|
||||||
ignorePnpmfile?: boolean
|
ignorePnpmfile?: boolean
|
||||||
pnpmfile: string
|
pnpmfile: string
|
||||||
hooks?: Hooks
|
hooks?: Hooks
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ function hardlinkPkg (
|
|||||||
if (
|
if (
|
||||||
!opts.fromStore ||
|
!opts.fromStore ||
|
||||||
opts.force ||
|
opts.force ||
|
||||||
!pkgLinkedToStore(opts.filesMap, to)
|
!opts.disableRelinkFromStore && !pkgLinkedToStore(opts.filesMap, to)
|
||||||
) {
|
) {
|
||||||
importIndexedDir(importFile, to, opts.filesMap, opts)
|
importIndexedDir(importFile, to, opts.filesMap, opts)
|
||||||
return 'hardlink'
|
return 'hardlink'
|
||||||
|
|||||||
@@ -124,6 +124,17 @@ export interface StrictInstallOptions {
|
|||||||
extendNodePath: boolean
|
extendNodePath: boolean
|
||||||
excludeLinksFromLockfile: boolean
|
excludeLinksFromLockfile: boolean
|
||||||
confirmModulesPurge: boolean
|
confirmModulesPurge: boolean
|
||||||
|
/**
|
||||||
|
* Don't relink packages if they are not hard linked from the store.
|
||||||
|
* This also applies to injected dependencies, which are linked from the local package's location.
|
||||||
|
*
|
||||||
|
* This option was added to fix an issue with Bit CLI.
|
||||||
|
* Bit compile adds dist directories to the injected dependencies, so if pnpm were to relink them,
|
||||||
|
* the dist directories would be deleted.
|
||||||
|
*
|
||||||
|
* The option might be used in the future to improve performance.
|
||||||
|
*/
|
||||||
|
disableRelinkFromStore: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export type InstallOptions =
|
export type InstallOptions =
|
||||||
|
|||||||
@@ -1094,6 +1094,7 @@ const _installInContext: InstallFunction = async (projects, ctx, opts) => {
|
|||||||
dedupeDirectDeps: opts.dedupeDirectDeps,
|
dedupeDirectDeps: opts.dedupeDirectDeps,
|
||||||
dependenciesByProjectId,
|
dependenciesByProjectId,
|
||||||
depsStateCache,
|
depsStateCache,
|
||||||
|
disableRelinkFromStore: opts.disableRelinkFromStore,
|
||||||
extraNodePaths: ctx.extraNodePaths,
|
extraNodePaths: ctx.extraNodePaths,
|
||||||
force: opts.force,
|
force: opts.force,
|
||||||
hoistedDependencies: ctx.hoistedDependencies,
|
hoistedDependencies: ctx.hoistedDependencies,
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ export async function linkPackages (
|
|||||||
currentLockfile: Lockfile
|
currentLockfile: Lockfile
|
||||||
dedupeDirectDeps: boolean
|
dedupeDirectDeps: boolean
|
||||||
dependenciesByProjectId: Record<string, Record<string, string>>
|
dependenciesByProjectId: Record<string, Record<string, string>>
|
||||||
|
disableRelinkFromStore?: boolean
|
||||||
force: boolean
|
force: boolean
|
||||||
depsStateCache: DepsStateCache
|
depsStateCache: DepsStateCache
|
||||||
extraNodePaths: string[]
|
extraNodePaths: string[]
|
||||||
@@ -143,6 +144,7 @@ export async function linkPackages (
|
|||||||
newCurrentLockfile,
|
newCurrentLockfile,
|
||||||
depGraph,
|
depGraph,
|
||||||
{
|
{
|
||||||
|
disableRelinkFromStore: opts.disableRelinkFromStore,
|
||||||
force: opts.force,
|
force: opts.force,
|
||||||
depsStateCache: opts.depsStateCache,
|
depsStateCache: opts.depsStateCache,
|
||||||
ignoreScripts: opts.ignoreScripts,
|
ignoreScripts: opts.ignoreScripts,
|
||||||
@@ -301,6 +303,7 @@ async function linkNewPackages (
|
|||||||
depGraph: DependenciesGraph,
|
depGraph: DependenciesGraph,
|
||||||
opts: {
|
opts: {
|
||||||
depsStateCache: DepsStateCache
|
depsStateCache: DepsStateCache
|
||||||
|
disableRelinkFromStore?: boolean
|
||||||
force: boolean
|
force: boolean
|
||||||
optional: boolean
|
optional: boolean
|
||||||
ignoreScripts: boolean
|
ignoreScripts: boolean
|
||||||
@@ -366,6 +369,7 @@ async function linkNewPackages (
|
|||||||
linkAllPkgs(opts.storeController, newPkgs, {
|
linkAllPkgs(opts.storeController, newPkgs, {
|
||||||
depGraph,
|
depGraph,
|
||||||
depsStateCache: opts.depsStateCache,
|
depsStateCache: opts.depsStateCache,
|
||||||
|
disableRelinkFromStore: opts.disableRelinkFromStore,
|
||||||
force: opts.force,
|
force: opts.force,
|
||||||
ignoreScripts: opts.ignoreScripts,
|
ignoreScripts: opts.ignoreScripts,
|
||||||
lockfileDir: opts.lockfileDir,
|
lockfileDir: opts.lockfileDir,
|
||||||
@@ -418,6 +422,7 @@ async function linkAllPkgs (
|
|||||||
opts: {
|
opts: {
|
||||||
depGraph: DependenciesGraph
|
depGraph: DependenciesGraph
|
||||||
depsStateCache: DepsStateCache
|
depsStateCache: DepsStateCache
|
||||||
|
disableRelinkFromStore?: boolean
|
||||||
force: boolean
|
force: boolean
|
||||||
ignoreScripts: boolean
|
ignoreScripts: boolean
|
||||||
lockfileDir: string
|
lockfileDir: string
|
||||||
@@ -439,6 +444,7 @@ async function linkAllPkgs (
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
const { importMethod, isBuilt } = await storeController.importPackage(depNode.dir, {
|
const { importMethod, isBuilt } = await storeController.importPackage(depNode.dir, {
|
||||||
|
disableRelinkFromStore: opts.disableRelinkFromStore,
|
||||||
filesResponse: files,
|
filesResponse: files,
|
||||||
force: opts.force,
|
force: opts.force,
|
||||||
sideEffectsCacheKey,
|
sideEffectsCacheKey,
|
||||||
|
|||||||
@@ -1606,3 +1606,179 @@ test('injected package is kept up-to-date when it is hoisted to multiple places'
|
|||||||
expect(modulesState?.injectedDeps?.['project-3'][0]).toEqual(path.join('project-1', 'node_modules', 'is-positive'))
|
expect(modulesState?.injectedDeps?.['project-3'][0]).toEqual(path.join('project-1', 'node_modules', 'is-positive'))
|
||||||
expect(modulesState?.injectedDeps?.['project-3'][1]).toEqual(path.join('project-2', 'node_modules', 'is-positive'))
|
expect(modulesState?.injectedDeps?.['project-3'][1]).toEqual(path.join('project-2', 'node_modules', 'is-positive'))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('relink injected dependency on install by default', async () => {
|
||||||
|
const depManifest = {
|
||||||
|
name: 'dep',
|
||||||
|
version: '1.0.0',
|
||||||
|
}
|
||||||
|
const mainManifest = {
|
||||||
|
name: 'main',
|
||||||
|
version: '1.0.0',
|
||||||
|
dependencies: {
|
||||||
|
dep: 'workspace:1.0.0',
|
||||||
|
},
|
||||||
|
dependenciesMeta: {
|
||||||
|
dep: {
|
||||||
|
injected: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
preparePackages([
|
||||||
|
{
|
||||||
|
location: 'dep',
|
||||||
|
package: depManifest,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
location: 'main',
|
||||||
|
package: mainManifest,
|
||||||
|
},
|
||||||
|
])
|
||||||
|
fs.writeFileSync('dep/index.js', 'console.log("dep")')
|
||||||
|
const importers: MutatedProject[] = [
|
||||||
|
{
|
||||||
|
mutation: 'install',
|
||||||
|
rootDir: path.resolve('dep'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
mutation: 'install',
|
||||||
|
rootDir: path.resolve('main'),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
const allProjects: ProjectOptions[] = [
|
||||||
|
{
|
||||||
|
buildIndex: 0,
|
||||||
|
manifest: depManifest,
|
||||||
|
rootDir: path.resolve('dep'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
buildIndex: 0,
|
||||||
|
manifest: mainManifest,
|
||||||
|
rootDir: path.resolve('main'),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
const workspacePackages = {
|
||||||
|
dep: {
|
||||||
|
'1.0.0': {
|
||||||
|
dir: path.resolve('dep'),
|
||||||
|
manifest: depManifest,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
await mutateModules(importers, await testDefaults({
|
||||||
|
allProjects,
|
||||||
|
workspacePackages,
|
||||||
|
packageImportMethod: 'hardlink',
|
||||||
|
fastUnpack: false,
|
||||||
|
}))
|
||||||
|
|
||||||
|
const indexJsPath = path.resolve('main/node_modules/dep/index.js')
|
||||||
|
const getInode = () => fs.statSync(indexJsPath).ino
|
||||||
|
const storeInode = getInode()
|
||||||
|
|
||||||
|
// rewriting index.js, to destroy the link
|
||||||
|
fs.unlinkSync(indexJsPath)
|
||||||
|
fs.writeFileSync(indexJsPath, 'console.log("dep updated")')
|
||||||
|
|
||||||
|
expect(storeInode).not.toEqual(getInode())
|
||||||
|
|
||||||
|
await mutateModules(importers, await testDefaults({
|
||||||
|
allProjects,
|
||||||
|
workspacePackages,
|
||||||
|
packageImportMethod: 'hardlink',
|
||||||
|
fastUnpack: false,
|
||||||
|
}))
|
||||||
|
|
||||||
|
expect(storeInode).toEqual(getInode())
|
||||||
|
})
|
||||||
|
|
||||||
|
test('do not relink injected dependency on install when disableRelinkFromStore is set to true', async () => {
|
||||||
|
const depManifest = {
|
||||||
|
name: 'dep',
|
||||||
|
version: '1.0.0',
|
||||||
|
}
|
||||||
|
const mainManifest = {
|
||||||
|
name: 'main',
|
||||||
|
version: '1.0.0',
|
||||||
|
dependencies: {
|
||||||
|
dep: 'workspace:1.0.0',
|
||||||
|
},
|
||||||
|
dependenciesMeta: {
|
||||||
|
dep: {
|
||||||
|
injected: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
preparePackages([
|
||||||
|
{
|
||||||
|
location: 'dep',
|
||||||
|
package: depManifest,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
location: 'main',
|
||||||
|
package: mainManifest,
|
||||||
|
},
|
||||||
|
])
|
||||||
|
fs.writeFileSync('dep/index.js', 'console.log("dep")')
|
||||||
|
const importers: MutatedProject[] = [
|
||||||
|
{
|
||||||
|
mutation: 'install',
|
||||||
|
rootDir: path.resolve('dep'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
mutation: 'install',
|
||||||
|
rootDir: path.resolve('main'),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
const allProjects: ProjectOptions[] = [
|
||||||
|
{
|
||||||
|
buildIndex: 0,
|
||||||
|
manifest: depManifest,
|
||||||
|
rootDir: path.resolve('dep'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
buildIndex: 0,
|
||||||
|
manifest: mainManifest,
|
||||||
|
rootDir: path.resolve('main'),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
const workspacePackages = {
|
||||||
|
dep: {
|
||||||
|
'1.0.0': {
|
||||||
|
dir: path.resolve('dep'),
|
||||||
|
manifest: depManifest,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
await mutateModules(importers, await testDefaults({
|
||||||
|
allProjects,
|
||||||
|
workspacePackages,
|
||||||
|
packageImportMethod: 'hardlink',
|
||||||
|
fastUnpack: false,
|
||||||
|
}))
|
||||||
|
|
||||||
|
const pkgJsonPath = path.resolve('main/node_modules/dep/package.json')
|
||||||
|
const getInode = () => fs.statSync(pkgJsonPath).ino
|
||||||
|
const storeInode = getInode()
|
||||||
|
|
||||||
|
// rewriting index.js, to destroy the link
|
||||||
|
const pkgJsonContent = fs.readFileSync(pkgJsonPath, 'utf8')
|
||||||
|
fs.unlinkSync(pkgJsonPath)
|
||||||
|
fs.writeFileSync(pkgJsonPath, pkgJsonContent)
|
||||||
|
|
||||||
|
const newInode = getInode()
|
||||||
|
|
||||||
|
expect(storeInode).not.toEqual(newInode)
|
||||||
|
|
||||||
|
await mutateModules(importers, await testDefaults({
|
||||||
|
allProjects,
|
||||||
|
workspacePackages,
|
||||||
|
packageImportMethod: 'hardlink',
|
||||||
|
fastUnpack: false,
|
||||||
|
disableRelinkFromStore: true,
|
||||||
|
}, {}, {}, {
|
||||||
|
relinkLocalDirDeps: false,
|
||||||
|
}))
|
||||||
|
|
||||||
|
expect(newInode).toEqual(getInode())
|
||||||
|
})
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ export interface HeadlessOptions {
|
|||||||
sideEffectsCacheRead: boolean
|
sideEffectsCacheRead: boolean
|
||||||
sideEffectsCacheWrite: boolean
|
sideEffectsCacheWrite: boolean
|
||||||
symlink?: boolean
|
symlink?: boolean
|
||||||
|
disableRelinkFromStore?: boolean
|
||||||
force: boolean
|
force: boolean
|
||||||
storeDir: string
|
storeDir: string
|
||||||
rawConfig: object
|
rawConfig: object
|
||||||
@@ -353,6 +354,7 @@ export async function headlessInstall (opts: HeadlessOptions): Promise<Installat
|
|||||||
if (opts.nodeLinker === 'hoisted' && hierarchy && prevGraph) {
|
if (opts.nodeLinker === 'hoisted' && hierarchy && prevGraph) {
|
||||||
await linkHoistedModules(opts.storeController, graph, prevGraph, hierarchy, {
|
await linkHoistedModules(opts.storeController, graph, prevGraph, hierarchy, {
|
||||||
depsStateCache,
|
depsStateCache,
|
||||||
|
disableRelinkFromStore: opts.disableRelinkFromStore,
|
||||||
force: opts.force,
|
force: opts.force,
|
||||||
ignoreScripts: opts.ignoreScripts,
|
ignoreScripts: opts.ignoreScripts,
|
||||||
lockfileDir: opts.lockfileDir,
|
lockfileDir: opts.lockfileDir,
|
||||||
@@ -383,6 +385,7 @@ export async function headlessInstall (opts: HeadlessOptions): Promise<Installat
|
|||||||
}),
|
}),
|
||||||
linkAllPkgs(opts.storeController, depNodes, {
|
linkAllPkgs(opts.storeController, depNodes, {
|
||||||
force: opts.force,
|
force: opts.force,
|
||||||
|
disableRelinkFromStore: opts.disableRelinkFromStore,
|
||||||
depGraph: graph,
|
depGraph: graph,
|
||||||
depsStateCache,
|
depsStateCache,
|
||||||
ignoreScripts: opts.ignoreScripts,
|
ignoreScripts: opts.ignoreScripts,
|
||||||
@@ -770,6 +773,7 @@ async function linkAllPkgs (
|
|||||||
opts: {
|
opts: {
|
||||||
depGraph: DependenciesGraph
|
depGraph: DependenciesGraph
|
||||||
depsStateCache: DepsStateCache
|
depsStateCache: DepsStateCache
|
||||||
|
disableRelinkFromStore?: boolean
|
||||||
force: boolean
|
force: boolean
|
||||||
ignoreScripts: boolean
|
ignoreScripts: boolean
|
||||||
lockfileDir: string
|
lockfileDir: string
|
||||||
@@ -796,6 +800,7 @@ async function linkAllPkgs (
|
|||||||
const { importMethod, isBuilt } = await storeController.importPackage(depNode.dir, {
|
const { importMethod, isBuilt } = await storeController.importPackage(depNode.dir, {
|
||||||
filesResponse,
|
filesResponse,
|
||||||
force: opts.force,
|
force: opts.force,
|
||||||
|
disableRelinkFromStore: opts.disableRelinkFromStore,
|
||||||
requiresBuild: depNode.requiresBuild || depNode.patchFile != null,
|
requiresBuild: depNode.requiresBuild || depNode.patchFile != null,
|
||||||
sideEffectsCacheKey,
|
sideEffectsCacheKey,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ export async function linkHoistedModules (
|
|||||||
hierarchy: DepHierarchy,
|
hierarchy: DepHierarchy,
|
||||||
opts: {
|
opts: {
|
||||||
depsStateCache: DepsStateCache
|
depsStateCache: DepsStateCache
|
||||||
|
disableRelinkFromStore?: boolean
|
||||||
force: boolean
|
force: boolean
|
||||||
ignoreScripts: boolean
|
ignoreScripts: boolean
|
||||||
lockfileDir: string
|
lockfileDir: string
|
||||||
@@ -86,6 +87,7 @@ async function linkAllPkgsInOrder (
|
|||||||
parentDir: string,
|
parentDir: string,
|
||||||
opts: {
|
opts: {
|
||||||
depsStateCache: DepsStateCache
|
depsStateCache: DepsStateCache
|
||||||
|
disableRelinkFromStore?: boolean
|
||||||
force: boolean
|
force: boolean
|
||||||
ignoreScripts: boolean
|
ignoreScripts: boolean
|
||||||
lockfileDir: string
|
lockfileDir: string
|
||||||
@@ -121,6 +123,7 @@ async function linkAllPkgsInOrder (
|
|||||||
const { importMethod, isBuilt } = await storeController.importPackage(depNode.dir, {
|
const { importMethod, isBuilt } = await storeController.importPackage(depNode.dir, {
|
||||||
filesResponse,
|
filesResponse,
|
||||||
force: opts.force || depNode.depPath !== prevGraph[dir]?.depPath,
|
force: opts.force || depNode.depPath !== prevGraph[dir]?.depPath,
|
||||||
|
disableRelinkFromStore: opts.disableRelinkFromStore,
|
||||||
keepModulesDir: true,
|
keepModulesDir: true,
|
||||||
requiresBuild: depNode.requiresBuild || depNode.patchFile != null,
|
requiresBuild: depNode.requiresBuild || depNode.patchFile != null,
|
||||||
sideEffectsCacheKey,
|
sideEffectsCacheKey,
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ export type PackageFilesResponse = {
|
|||||||
})
|
})
|
||||||
|
|
||||||
export interface ImportPackageOpts {
|
export interface ImportPackageOpts {
|
||||||
|
disableRelinkFromStore?: boolean
|
||||||
requiresBuild?: boolean
|
requiresBuild?: boolean
|
||||||
sideEffectsCacheKey?: string
|
sideEffectsCacheKey?: string
|
||||||
filesResponse: PackageFilesResponse
|
filesResponse: PackageFilesResponse
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ export function createPackageImporterAsync (
|
|||||||
: (opts.filesResponse.packageImportMethod ?? packageImportMethod)
|
: (opts.filesResponse.packageImportMethod ?? packageImportMethod)
|
||||||
const impPkg = cachedImporterCreator(pkgImportMethod)
|
const impPkg = cachedImporterCreator(pkgImportMethod)
|
||||||
const importMethod = await impPkg(to, {
|
const importMethod = await impPkg(to, {
|
||||||
|
disableRelinkFromStore: opts.disableRelinkFromStore,
|
||||||
filesMap,
|
filesMap,
|
||||||
fromStore: opts.filesResponse.fromStore,
|
fromStore: opts.filesResponse.fromStore,
|
||||||
force: opts.force,
|
force: opts.force,
|
||||||
@@ -67,6 +68,7 @@ function createPackageImporter (
|
|||||||
: (opts.filesResponse.packageImportMethod ?? packageImportMethod)
|
: (opts.filesResponse.packageImportMethod ?? packageImportMethod)
|
||||||
const impPkg = cachedImporterCreator(pkgImportMethod)
|
const impPkg = cachedImporterCreator(pkgImportMethod)
|
||||||
const importMethod = impPkg(to, {
|
const importMethod = impPkg(to, {
|
||||||
|
disableRelinkFromStore: opts.disableRelinkFromStore,
|
||||||
filesMap,
|
filesMap,
|
||||||
fromStore: opts.filesResponse.fromStore,
|
fromStore: opts.filesResponse.fromStore,
|
||||||
force: opts.force,
|
force: opts.force,
|
||||||
|
|||||||
@@ -44,6 +44,14 @@ export type CreateNewStoreControllerOptions = CreateResolverOptions & Pick<Confi
|
|||||||
> & {
|
> & {
|
||||||
cafsLocker?: CafsLocker
|
cafsLocker?: CafsLocker
|
||||||
ignoreFile?: (filename: string) => boolean
|
ignoreFile?: (filename: string) => boolean
|
||||||
|
/**
|
||||||
|
* By default, injected (also known as local) dependencies are relinked on every install
|
||||||
|
* to ensure that the links are always up-to-date.
|
||||||
|
* If another tool persists modifications to the injected dependencies,
|
||||||
|
* this option can be set to `false`.
|
||||||
|
* For example, 'bit compile' writes the compiled code directly to the node_modules directory,
|
||||||
|
* eliminating the need to relink the package.
|
||||||
|
*/
|
||||||
relinkLocalDirDeps?: boolean
|
relinkLocalDirDeps?: boolean
|
||||||
} & Partial<Pick<Config, 'userConfig' | 'deployAllFiles'>> & Pick<ClientOptions, 'resolveSymlinksInInjectedDirs'>
|
} & Partial<Pick<Config, 'userConfig' | 'deployAllFiles'>> & Pick<ClientOptions, 'resolveSymlinksInInjectedDirs'>
|
||||||
|
|
||||||
|
|||||||
@@ -161,6 +161,7 @@ export interface PackageResponse {
|
|||||||
export type FilesMap = Record<string, string>
|
export type FilesMap = Record<string, string>
|
||||||
|
|
||||||
export interface ImportOptions {
|
export interface ImportOptions {
|
||||||
|
disableRelinkFromStore?: boolean
|
||||||
filesMap: FilesMap
|
filesMap: FilesMap
|
||||||
force: boolean
|
force: boolean
|
||||||
fromStore: boolean
|
fromStore: boolean
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export interface LinkPkgMessage {
|
|||||||
requiresBuild?: boolean
|
requiresBuild?: boolean
|
||||||
force: boolean
|
force: boolean
|
||||||
keepModulesDir?: boolean
|
keepModulesDir?: boolean
|
||||||
|
disableRelinkFromStore?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SymlinkAllModulesMessage {
|
export interface SymlinkAllModulesMessage {
|
||||||
|
|||||||
@@ -176,6 +176,7 @@ function importPackage ({
|
|||||||
requiresBuild,
|
requiresBuild,
|
||||||
force,
|
force,
|
||||||
keepModulesDir,
|
keepModulesDir,
|
||||||
|
disableRelinkFromStore,
|
||||||
}: LinkPkgMessage) {
|
}: LinkPkgMessage) {
|
||||||
const cacheKey = JSON.stringify({ storeDir, packageImportMethod })
|
const cacheKey = JSON.stringify({ storeDir, packageImportMethod })
|
||||||
if (!cafsStoreCache.has(cacheKey)) {
|
if (!cafsStoreCache.has(cacheKey)) {
|
||||||
@@ -185,6 +186,7 @@ function importPackage ({
|
|||||||
const { importMethod, isBuilt } = cafsStore.importPackage(targetDir, {
|
const { importMethod, isBuilt } = cafsStore.importPackage(targetDir, {
|
||||||
filesResponse,
|
filesResponse,
|
||||||
force,
|
force,
|
||||||
|
disableRelinkFromStore,
|
||||||
requiresBuild,
|
requiresBuild,
|
||||||
sideEffectsCacheKey,
|
sideEffectsCacheKey,
|
||||||
keepModulesDir,
|
keepModulesDir,
|
||||||
|
|||||||
Reference in New Issue
Block a user