list-installed
v5.3.1
Published
Checks that all dependencies in your package.json have supported versions installed
Downloads
17,300
Readme
List Installed
A modern typed async alternative to read-installed
and readdir-scoped-modules
. Used to list and return all modules installed in node_modules
, either just their names or their package.json
files.
Usage
Simple
npm install list-installed
import { listInstalled } from 'list-installed';
const pkgMap = await listInstalled(__dirname);
// Eg. iterate over the map
for (const [moduleName, pkg] of pkgMap.entries()) {
// "moduleName" is identical to pkg.name
}
Methods
readdirScoped(path)
path
: Astring
pointing to the path of a directory, either absolute or relative to the current working directory. Eg:./node_modules/
Returns: AsyncGenerator
that emits string
of the name of each found directory
Similar functionality to readdir()
from readdir-scoped-modules
.
Returns all directories in path
, with the scoped directories (like @foo
) expanded and joined with the directories directly beneath them (like eg. @foo/abc
and @foo/bar
if abc
and bar
are the two directories in @foo
, though it will never expand to @
- or .
-prefixed subdirectories and will hence never return @foo/@xyz
or @foo/.bin
).
Will not return any directory with a name that begins with .
.
readdirModuleTree(path, depth=0)
path
: Astring
pointing to the path of a directory, either absolute or relative to the current working directory. Eg: *./node_modules/
depth
: If set to0
, then this method is identical toreaddirScoped(path)
, else this will return also modules found this many layers deep
Returns: AsyncGenerator
that emits string
paths, relative to the provided path
, for each found module
Works the same as readdirScoped
with the addition that if depth
is set to higher than 0
, then for every result of readdirScoped
a node_modules
subdirectory is looked for and if found, readdirScoped
is run on that directory as well, prefixing all results with the parent name/prefix followed by /node_modules/
.
For a two level deep tree the name returned would be like foo/node_modules/bar/node_modules/xyz
, which one can do .split('/node_modules/')
on to get in array shape.
listInstalled(path, [{ filter(pkg, alias) }])
path
: Astring
pointing to the path of a module, either absolute or relative to the current working directory. Eg:./*
filter
: An optional callback that's similar toArray.prototype.filter()
. Called with the resolved package file + if the module is aliased also the alias. LikeArray.prototype.filter()
it expects a truthy value back to include the item and a falsy to skip it. If the value returned is aPromise
it will be resolved before the value is checked.
Returns: Promise
that resolves to a Map
that has string
keys of the names of the found dependencies and values being the parsed package.json
files.
Similar functionality to readInstalled()
from read-installed
.
Returns all top level dependencies found installed for a module.
Parses all package.json
in parallell using read-pkg
with results corresponding to the read-pkg
NormalizedPackageJson
type.
listInstalledGenerator(path, [{ filter }])
path
: Astring
pointing to the path of a module, either absolute or relative to the current working directory. Eg:./*
filter
: An optional callback that's similar toArray.prototype.filter()
. Called with the resolved package file + if the module is aliased also the alias. LikeArray.prototype.filter()
it expects a truthy value back to include the item and a falsy to skip it. If the value returned is aPromise
it will be resolved before the value is checked.
Returns: AsyncGenerator
that emits an object for each of the found dependencies. The object has two properties: alias
, containing the alias when the module has been installed under an alias, and pkg
, containing the parsed package.json
files of the found dependencies.
Same as listInstalled(path)
, but rather than parsing package.json
in parallell, it parses it sequentially at the pace that it is consumed.
workspaceLookup([options])
options.ignorePaths
: An array of strings,string[]
, with paths to ignore during the lookup of workspacesoptions.includeWorkspaceRoot=true
: If set tofalse
, then the workspace root will not be returnedoptions.path='.'
: Astring
pointing to the path of the module to look up thepackage.json
and installed modules foroptions.skipWorkspaces=false
: If set, then no workspace lookup will be done and no workspaces be returnedoptions.workspace
: An array of strings that should match the name of a workspace, its path or its path prefix. Only matching workspaces will be returned (as well as the root ifincludeWorkspaceRoot
istrue
). If a workspace can't be found, then an error will be thrown when the generator has been fully iterated through.- ...and any other option available in
read-workspaces
Returns: AsyncGenerator
that emits { cwd, installed, pkg, workspace }
for the root (if includeWorkspaceRoot
is true
) and each matching workspace (if skipWorkspaces
isn't true
). cwd
is the path to the workspace or root, installed
is an object that's the combined result of a listInstalled
for the root and that cwd
, pkg
is the package.json
of the workspace or root and workspace
is the name of the workspace and is not set on the root result.
Used by
Similar modules
list-dependents
– looks up the the modules depending on a provided module them and returns them in a similar way to this moduleread-workspaces
– provides the workspace lookup functionality that this module uses