How to use the command 'npm query' (with examples)
The npm query
command is used to print an array of dependency objects using CSS-like selectors. It allows users to filter and display specific dependencies based on various criteria.
Use case 1: Print direct dependencies
Code:
npm query ':root > *'
Motivation: This use case is useful when you want to get a list of all the direct dependencies of your project.
Explanation:
npm query
is the command itself.:root > *
is the selector expression used to filter the dependencies. It selects all direct dependencies.
Example output:
[
{
"name": "dependency1",
"version": "1.0.0"
},
{
"name": "dependency2",
"version": "2.3.1"
},
...
]
Use case 2: Print all direct production/development dependencies
Code:
npm query ':root > .prod|dev'
Motivation: This use case is helpful when you want to differentiate between production and development dependencies and view them separately.
Explanation:
npm query
is the command.:root > .prod|dev
is the selector expression that selects all direct dependencies that have the class.prod
or.dev
.
Example output:
[
{
"name": "dependency1",
"version": "1.0.0"
},
{
"name": "dependency2",
"version": "2.3.1"
},
...
]
Use case 3: Print dependencies with a specific name
Code:
npm query '#package'
Motivation: This use case is useful when you want to search for a specific dependency by its name.
Explanation:
npm query
is the command.#package
is the selector expression that selects all the dependencies with the name “package”.
Example output:
[
{
"name": "package",
"version": "1.0.0"
}
]
Use case 4: Print dependencies with a specific name and within a semantic versioning range
Code:
npm query #package@semantic_version
Motivation: This use case allows you to find specific versions of a dependency within a semantic versioning range.
Explanation:
npm query
is the command.#package@semantic_version
is the selector expression that selects the dependency named “package” with a version within the specified semantic versioning range.
Example output:
[
{
"name": "package",
"version": "1.2.0"
}
]
Use case 5: Print dependencies which have no dependencies
Code:
npm query ':empty'
Motivation: This use case helps you find dependencies that do not have any dependencies of their own. These dependencies are usually considered “leaf” dependencies.
Explanation:
npm query
is the command.:empty
is the selector expression that selects all the dependencies with no dependencies.
Example output:
[
{
"name": "dependency1",
"version": "1.0.0"
},
{
"name": "dependency2",
"version": "2.3.1"
},
...
]
Use case 6: Find all dependencies with postinstall scripts and uninstall them
Code:
npm query ":attr(scripts, [postinstall])" | jq 'map(.name) | join("\n")' -r | xargs -I {} npm uninstall {}
Motivation: This use case is helpful when you want to uninstall all dependencies that have post-install scripts.
Explanation:
npm query ":attr(scripts, [postinstall])"
selects all dependencies that have a postinstall script.jq 'map(.name) | join("\n")' -r
extracts only the names of the dependencies from the output.xargs -I {} npm uninstall {}
uninstalls each dependency returned by the previous command.
Example output:
Uninstalling dependency1...
Uninstalling dependency2...
...
Use case 7: Find all Git dependencies and print which application requires them
Code:
npm query ":type(git)" | jq 'map(.name)' | xargs -I {} npm why {}
Motivation: This use case is useful when you want to find all Git dependencies in your project and determine which application requires them.
Explanation:
npm query ":type(git)"
selects all Git dependencies.jq 'map(.name)'
retrieves only the names of the dependencies from the output.xargs -I {} npm why {}
checks which application requires each Git dependency.
Example output:
Dependency1 is required by application1
Dependency2 is required by application2
...
Conclusion:
The npm query
command provides a powerful way to filter and display specific dependencies based on various criteria. It allows users to easily manage and understand their project’s dependencies.