* fix: throw a frozen lockfile error when catalogs change * fix: work around lockfile mismatch when installing `__fixtures__` ``` > @ step1 /home/runner/work/pnpm/pnpm/__fixtures__ > node ../pnpm/dist/pnpm.mjs install -rf --frozen-lockfile --no-shared-workspace-lockfile --no-link-workspace-packages . | WARN using --force I sure hope you know what you are doing Scope: all 26 workspace projects circular | Progress: resolved 1, reused 0, downloaded 0, added 0 circular | +4 + fixture | Progress: resolved 1, reused 0, downloaded 0, added 0 fixture | +12 + fixture-with-no-pkg-name-and-no-version | Progress: resolved 1, reused 0, downloaded 0, added 0 fixture-with-no-pkg-name-and-no-version | +12 + fixture-with-no-pkg-version | Progress: resolved 1, reused 0, downloaded 0, added 0 fixture-with-no-pkg-version | +12 + circular | Progress: resolved 4, reused 0, downloaded 4, added 4, done fixture | Progress: resolved 12, reused 6, downloaded 6, added 12, done fixture-with-no-pkg-name-and-no-version | Progress: resolved 12, reused 0, downloaded 0, added 12, done fixture-with-no-pkg-version | Progress: resolved 12, reused 0, downloaded 0, added 12, done general | Progress: resolved 1, reused 0, downloaded 0, added 0 general | +13 + has-2-outdated-deps | Progress: resolved 1, reused 0, downloaded 0, added 0 has-2-outdated-deps | +2 + undefined /home/runner/work/pnpm/pnpm/__fixtures__/has-outdated-deps-using-catalog-protocol: ERR_PNPM_LOCKFILE_CONFIG_MISMATCH Cannot proceed with the frozen installation. The current "catalogs" configuration doesn't match the value found in the lockfile Update your lockfile using "pnpm install --no-frozen-lockfile" ``` close #9369
@pnpm/core
Fast, disk space efficient installation engine. Used by pnpm
Install
Install it via npm.
pnpm add @pnpm/core
It also depends on @pnpm/logger version 1, so install it as well via:
pnpm add @pnpm/logger@1
API
mutateModules(importers, options)
TODO
link(linkFromPkgs, linkToModules, [options])
Create symbolic links from the linked packages to the target package's node_modules (and its node_modules/.bin).
Arguments:
linkFromPkgs- String[] - paths to the packages that should be linked.linkToModules- String - path to the dependent package'snode_modulesdirectory.options.reporter- Function - A function that listens for logs.
linkToGlobal(linkFrom, options)
Create a symbolic link from the specified package to the global node_modules.
Arguments:
linkFrom- String - path to the package that should be linked.globalDir- String - path to the global directory.options.reporter- Function - A function that listens for logs.
linkFromGlobal(pkgNames, linkTo, options)
Create symbolic links from the global pkgNames to the linkTo/node_modules folder.
Arguments:
pkgNames- String[] - packages to link.linkTo- String - package to link to.globalDir- String - path to the global directory.options.reporter- Function - A function that listens for logs.
storeStatus([options])
Return the list of modified dependencies.
Arguments:
options.reporter- Function - A function that listens for logs.
Returns: Promise<string[]> - the paths to the modified packages of the current project. The paths contain the location of packages in the store,
not in the projects node_modules folder.
storePrune([options])
Remove unreferenced packages from the store.
Hooks
Hooks are functions that can step into the installation process.
readPackage(pkg: Manifest): Manifest | Promise<Manifest>
This hook is called with every dependency's manifest information.
The modified manifest returned by this hook is then used by @pnpm/core during installation.
An async function is supported.
Example:
const { installPkgs } = require('@pnpm/core')
installPkgs({
hooks: {readPackage}
})
function readPackage (pkg) {
if (pkg.name === 'foo') {
pkg.dependencies = {
bar: '^2.0.0',
}
}
return pkg
}
afterAllResolved(lockfile: Lockfile): Lockfile | Promise<Lockfile>
This hook is called after all dependencies are resolved. It receives and returns the resolved lockfile object. An async function is supported.