npm-query - Dependency selector query
npm query <selector>
The npm query command allows for usage of css selectors in order to retrieve an array of dependency objects.
# find all
dependencies with postinstall scripts & uninstall them
npm query ":attr(scripts, [postinstall])" | jq
’map(.name)|join("\n")’ -r | xargs -I
{} npm uninstall {}
# find all git
dependencies & explain who requires them
npm query ":type(git)" | jq
’map(.name)’ | xargs -I {} npm why {}
// all deps
*
// all direct
deps
:root > *
// direct
production deps
:root > .prod
// direct
development deps
:root > .dev
// any peer dep
of a direct deps
:root > * > .peer
// any workspace dep
// all workspaces that depend on another workspace
// all workspaces that have peer deps
// any dep
named "lodash"
// equivalent to [name="lodash"]
#lodash
// any deps
named "lodash" & within semver range
ˆ"1.2.3"
#lodash@ˆ1.2.3
// equivalent to...
[name="lodash"]:semver(ˆ1.2.3)
// get the
hoisted node for a given semver range
#lodash@ˆ1.2.3:not(:deduped)
// querying
deps with a specific version
#[email protected]
// equivalent to...
[name="lodash"][version="2.1.5"]
// has any deps
:has(*)
// deps with no
other deps (ie. "leaf" nodes)
:empty
// manually
querying git dependencies
[repositoryˆ=github:],
[repositoryˆ=git:],
[repositoryˆ=https://github.com],
[repositoryˆ=http://github.com],
[repositoryˆ=https://github.com],
[repositoryˆ=+git:...]
// querying for
all git dependencies
:type(git)
// get production dependencies that aren’t also dev deps
// get
dependencies with specific licenses
[license=MIT], [license=ISC]
// find all
packages that have @ruyadorno as a contributor
:attr(contributors, [[email protected]])
• |
an array of dependency objects is returned which can contain multiple copies of the same package which may or may not have been linked or deduped |
[
{
"name": "",
"version": "",
"description": "",
"homepage": "",
"bugs": {},
"author": {},
"license": {},
"funding": {},
"files": [],
"main": "",
"browser": "",
"bin": {},
"man": [],
"directories": {},
"repository": {},
"scripts": {},
"config": {},
"dependencies": {},
"devDependencies": {},
"optionalDependencies": {},
"bundledDependencies": {},
"peerDependencies": {},
"peerDependenciesMeta": {},
"engines": {},
"os": [],
"cpu": [],
"workspaces": {},
"keywords": [],
...
},
...
If package-lock-only is enabled, only the information in the package lock (or shrinkwrap) is loaded. This means that information from the package.json files of your dependencies will not be included in the result set (e.g. description, homepage, engines).
If package-lock-only is enabled, only the information in the package lock (or shrinkwrap) is loaded. This means that information from the package.json files of your dependencies will not be included in the result set (e.g. description, homepage, engines).
• |
Default: false |
|||
• |
Type: Boolean |
Operates in "global" mode, so that packages are installed into the prefix folder instead of the current working directory. See npm help folders for more on the differences in behavior.
• |
packages are installed into the {prefix}/lib/node_modules folder, instead of the current working directory. | ||
• |
bin files are linked to {prefix}/bin | ||
• |
man pages are linked to {prefix}/share/man |
• |
Default: |
|||
• |
Type: String (can be set multiple times) |
Enable running a command in the context of the configured workspaces of the current project while filtering by running only the workspaces defined by this configuration option.
Valid values for the workspace config are either:
• |
Workspace names | ||
• |
Path to a workspace directory | ||
• |
Path to a parent workspace directory (will result in selecting all workspaces within that folder) |
When set for the npm init command, this may be set to the folder of a workspace which does not yet exist, to create the folder and set it up as a brand new workspace within the project.
This value is not exported to the environment for child processes.
• |
Default: null |
|||
• |
Type: null or Boolean |
Set to true to run the command in the context of all configured workspaces.
Explicitly setting this to false will cause commands like install to ignore workspaces altogether. When not set explicitly:
• |
Commands that operate on the node_modules tree (install, update, etc.) will link workspaces into the node_modules folder. - Commands that do other things (test, exec, publish, etc.) will operate on the root project, unless one or more workspaces are specified in the workspace config. |
This value is not exported to the environment for child processes.
• |
Default: false |
|||
• |
Type: Boolean |
Include the workspace root when workspaces are enabled for a command.
When false, specifying individual workspaces via the workspace config, or all workspaces via the workspaces flag, will cause npm to operate only on the specified workspaces, and not on the root project.
This value is not exported to the environment for child processes.
• |
Default: false |
|||
• |
Type: Boolean |
If set to true, the current operation will only use the package-lock.json, ignoring node_modules.
For update this means only the package-lock.json will be updated, instead of checking node_modules and downloading dependencies.
For list this means the output will be based on the tree described by the package-lock.json, rather than the contents of node_modules.
• |
npm help "dependency selectors" |