Pnpm is a fast, disk space-efficient package manager. Unlike npm and yarn, pnpm uses symbolic links to create a nested structure of dependencies.
Find files named pnpm-lock.yaml
with a corresponding package.json
file.
Only pnpm-lock.yaml
is used for analysis. CLI will parse and use the following fields.
in pnpm-lock.yaml
to analyze the dependency graph.
-
importers
[importersKey]
dependencies
: list of direct dependenciesdevDependencies
: list of development dependencies
-
packages
[packagesKey]
resolution
: infer git URL, git commit, or package source URL.dependencies
: list of transitive dependenciespeerDependencies
: list of peer dependencies (will be treated like any other dependency)dev
: to infer if this is used dependency or not. If the value istrue
by default CLI will not include this in the final analysis.
An example is provided below:
lockfileVersion: 5.4
importers:
.:
specifiers:
some-pkg: https://some-url/pkg.tar.gz
react: '*'
my-local-pkg: file:../libs/my-local-pkg
dependencies:
some-pkg: '@some-url/pkg.tar.gz'
my-local-pkg: file:../libs/my-local-pkg
devDependencies:
react: 18.1.0
# workspace project in packages/some-ws-pkg directory from root.
packages/some-ws-pkg:
specifiers:
commander: 9.2.0
dependencies:
commander: 9.2.0
packages:
'@some-url/pkg.tar.gz':
resolution: {tarball: https://some-url/pkg.tar.gz}
name: some-pkg
version: 1.0.0
engines: {node: '>=4.0.0'}
dev: false
file:../libs/my-local-pkg:
resolution: {directory: "../libs/my-local-pkg", type: directory}
name: unifier
version: 1.0.0
dependencies:
loose-envify: 1.4.0
engines: {node: '>=4.0.0'}
dev: false
/commander/9.2.0:
resolution: {integrity: sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==}
engines: {node: ^12.20.0 || >=14}
dev: false
/react/18.1.0:
resolution: {integrity: sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==}
engines: {node: '>=0.10.0'}
dependencies:
loose-envify: 1.4.0
dev: true
/loose-envify/1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
dependencies:
js-tokens: 4.0.0
dev: false
/js-tokens/4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
dev: true
- If the dependency was resolved using git (
resolution
will havetype: git
attribute), FOSSA will use providedrepo
andcommit
attribute to analyze this dependency.
# FOSSA will use `commit` and `repo` to analyze the this dependency.
github.com/Marak/colors.js/6bc50e79eeaa1d87369bb3e7e608ebed18c5cf26:
resolution: {commit: 6bc50e79eeaa1d87369bb3e7e608ebed18c5cf26, repo: git+ssh://[email protected]/Marak/colors.js, type: git}
name: colors
version: 1.4.44-liberty-2
engines: {node: '>=0.1.90'}
dev: false
- If the dependency was resolved using tarball (
resolution
will havetarball
attribute) FOSSA will use provided URL address to download and analyze this dependency.
# FOSSA will analyze lodash from the tarball URL.
'@some-url/pkg.tar.gz':
resolution: {tarball: https://some-url/pkg.tar.gz}
name: some-pkg
version: 1.0.0
engines: {node: '>=4.0.0'}
dev: false
- If the dependency was resolved using the local directory (
resolution
will have thetype: directory
attribute), FOSSA will not analyze this dependency. Local dependency's transitive dependencies will be analyzed, and they will be promoted in place of local dependency.
# FOSSA will not analyze this dependency,
# But FOSSA will analyze its transitive dependency (if they are not sourced from the local directory)
#
# FOSSA will promote loose-envify of 1.4.0 in place of unifier.
file:../libs/my-local-pkg:
resolution: {directory: "../libs/my-local-pkg", type: directory}
name: unifier
version: 1.0.0
dependencies:
loose-envify: 1.4.0
engines: {node: '>=4.0.0'}
dev: false
- If the dependency was resolved using registry resolver, FOSSA will use the registry to analyze the dependency.
CLI will infer the package name and version using
/${dependencyName}/${dependencyVersion}
scheme from the package's key.
# Resolves to npm dependency: commander with 9.2.0 version
/commander/9.2.0:
resolution: {integrity: sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==}
engines: {node: ^12.20.0 || >=14}
dev: false
- Peer dependencies will be included in the analysis (they are treated like any other dependency).
- Pnpm workspaces are supported.
- Development dependencies (
dev: true
) are ignored by default from analysis. To include them in the analysis, execute CLI with--include-unused
flag e.g.fossa analyze --include-unused
. - Optional dependencies are included in the analysis by default. They can be ignored in FOSSA UI.
You can explicitly specify an analysis target in .fossa.yml
file. The example below will exclude all analysis targets except for pnpm.
# .fossa.yml
version: 3
targets:
only:
- type: pnpm