Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
test('relative link', async (t: tape.Test) => {
const project = prepare(t, {
dependencies: {
'hello-world-js-bin': '*',
},
})
const linkedPkgName = 'hello-world-js-bin'
const linkedPkgPath = path.resolve('..', linkedPkgName)
await ncp(pathToLocalPkg(linkedPkgName), linkedPkgPath)
await link([`../${linkedPkgName}`], path.join(process.cwd(), 'node_modules'), await testDefaults())
await project.isExecutable('.bin/hello-world-js-bin')
// The linked package has been installed successfully as well with bins linked
// to node_modules/.bin
const linkedProject = assertProject(t, linkedPkgPath)
await linkedProject.isExecutable('.bin/cowsay')
const wantedShrinkwrap = await project.loadShrinkwrap()
t.equal(wantedShrinkwrap.dependencies['hello-world-js-bin'], 'link:../hello-world-js-bin', 'link added to wanted shrinkwrap')
t.equal(wantedShrinkwrap.specifiers['hello-world-js-bin'], '*', 'specifier of linked dependency added to shrinkwrap.yaml')
const currentShrinkwrap = await project.loadCurrentShrinkwrap()
t.equal(currentShrinkwrap.dependencies['hello-world-js-bin'], 'link:../hello-world-js-bin', 'link added to wanted shrinkwrap')
})
storeController: s.ctrl,
storeDir: s.dir,
workspacePackages,
} as InstallOptions,
)
})),
)
const { manifest, writeImporterManifest } = await readImporterManifest(cwd, opts)
// When running `pnpm link --production ../source`
// only the `source` project should be pruned using the --production flag.
// The target directory should keep its existing dependencies.
// Except the ones that are replaced by the link.
delete linkOpts.include
const newManifest = await link(pkgPaths, path.join(cwd, 'node_modules'), {
...linkOpts,
manifest,
})
await writeImporterManifest(newManifest)
await Promise.all(
Array.from(storeControllerCache.values())
.map(async (storeControllerPromise) => {
const storeControllerHolder = await storeControllerPromise
await storeControllerHolder.ctrl.close()
}),
)
}
test('relative link is uninstalled', async (t: tape.Test) => {
const project = prepare(t)
const linkedPkgName = 'hello-world-js-bin'
const linkedPkgPath = path.resolve('..', linkedPkgName)
await ncp(pathToLocalPkg(linkedPkgName), linkedPkgPath)
await link([`../${linkedPkgName}`], path.join(process.cwd(), 'node_modules'), await testDefaults())
await uninstall([linkedPkgName], await testDefaults())
await project.hasNot(linkedPkgName)
})
test('node_modules is pruned after linking', async (t: tape.Test) => {
const project = prepare(t)
await writeJsonFile('../is-positive/package.json', {name: 'is-positive', version: '1.0.0'})
await installPkgs(['is-positive@1.0.0'], await testDefaults())
t.ok(await exists('node_modules/.localhost+4873/is-positive/1.0.0/node_modules/is-positive/package.json'))
await link(['../is-positive'], path.resolve('node_modules'), await testDefaults())
t.notOk(await exists('node_modules/.localhost+4873/is-positive/1.0.0/node_modules/is-positive/package.json'), 'pruned')
})
await Promise.all([
writeJsonFile('is-subdir/package.json', {
dependencies: {
'is-windows': '^1.0.0',
},
name: 'is-subdir',
version: '1.0.0',
}),
writeJsonFile('is-positive/package.json', {
name: 'is-positive',
version: '1.0.0',
}),
])
await link(['is-subdir', 'is-positive'], path.join('project', 'node_modules'), await testDefaults({prefix: path.resolve('project')}))
process.chdir('project')
await install(await testDefaults())
await unlinkPkgs(['is-subdir'], await testDefaults())
t.equal(typeof project.requireModule('is-subdir'), 'function', 'is-subdir installed after unlinked')
t.notOk((await isInnerLink('node_modules', 'is-positive')).isInner, 'is-positive left linked')
})
await Promise.all([
writeJsonFile('is-subdir/package.json', {
dependencies: {
'is-windows': '^1.0.0',
},
name: 'is-subdir',
version: '1.0.0',
}),
writeJsonFile('is-positive/package.json', {
name: 'is-positive',
version: '1.0.0',
}),
])
await link(['is-subdir', 'is-positive'], path.join('project', 'node_modules'), opts)
process.chdir('project')
await unlinkPkgs(['is-subdir', 'is-positive'], opts)
t.equal(typeof project.requireModule('is-subdir'), 'function', 'is-subdir installed after unlinked')
t.notOk(await exists(path.join('node_modules', 'is-positive')), 'is-positive removed as it is not in package.json')
})