目录
npm-query
选择 CLI 版本
目录
概述
npm query <selector>
描述
该 npm query
命令允许使用 css 选择器来检索依赖项对象的数组。
将 npm 查询管道传输到其他命令
# find all dependencies with postinstall scripts & uninstall themnpm query ":attr(scripts, [postinstall])" | jq 'map(.name)|join("\n")' -r | xargs -I {} npm uninstall {}# find all git dependencies & explain who requires themnpm 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.workspace// all workspaces that depend on another workspace.workspace > .workspace// all workspaces that have peer deps.workspace:has(.peer)// 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// 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.prod:not(.dev)// get dependencies with specific licenses[license=MIT], [license=ISC]// find all packages that have @ruyadorno as a contributor:attr(contributors, [[email protected]])
示例响应输出
- 返回依赖项对象的数组,其中可能包含同一包的多个副本,这些副本可能已链接或未链接,也可能已去重。
[{"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": [],...},...
预期一定数量的结果
一个常见的用途 npm query
是确保您的树中只有一个特定依赖项的版本。这在依赖于 typescript
的生态系统中尤为常见,在这些生态系统中,将状态拆分到两个不同但同名的包中会导致错误。您可以使用 --expect-results
或 --expect-result-count
在您的设置中确保 npm 如果您的树不像您希望的那样,将会退出并返回一个退出代码。
$ npm query '#react' --expect-result-count=1
也许您想快速检查是否有任何可以更新的生产依赖项。
$ npm query ':root>:outdated(in-range).prod' --no-expect-results
仅包锁模式
如果仅包锁已启用,则仅加载包锁(或 shrinkwrap)中的信息。这意味着依赖项的 package.json 文件中的信息将不会包含在结果集中(例如描述、主页、引擎)。
配置
全局
- 默认值:false
- 类型:布尔值
在“全局”模式下运行,以便将包安装到 prefix
文件夹而不是当前工作目录中。请参阅 文件夹 了解行为差异的更多信息。
- 包被安装到
{prefix}/lib/node_modules
文件夹,而不是当前工作目录。 - bin 文件链接到
{prefix}/bin
- 手册页链接到
{prefix}/share/man
工作区
- 默认值
- 类型:字符串(可以设置多次)
启用在当前项目的配置工作区的上下文中运行命令,同时通过仅运行此配置选项定义的工作区来进行过滤。
对于 workspace
配置的有效值为:
- 工作区名称
- 工作区目录的路径
- 父工作区目录的路径(将导致选择该文件夹中的所有工作区)
当为 npm init
命令设置时,这可以设置为尚未存在的工作区文件夹,以创建文件夹并将其设置为项目中的全新工作区。
此值不会导出到子进程的环境中。
工作区
- 默认值:null
- 类型:null 或布尔值
设置为 true 以在配置的 所有 工作区的上下文中运行命令。
明确将其设置为 false 将导致像 install
这样的命令完全忽略工作区。当未明确设置时
- 对
node_modules
树进行操作的命令(安装、更新等)将把工作区链接到node_modules
文件夹中。- 执行其他操作的命令(测试、执行、发布等)将在根项目上运行,除非 在workspace
配置中指定了一个或多个工作区。
此值不会导出到子进程的环境中。
include-workspace-root
- 默认值:false
- 类型:布尔值
当命令为工作区启用时,包含工作区根目录。
当设置为 false 时,通过 workspace
配置指定单个工作区,或通过 workspaces
标志指定所有工作区,将导致 npm 仅对指定的工作区进行操作,而不对根项目进行操作。
此值不会导出到子进程的环境中。
package-lock-only
- 默认值:false
- 类型:布尔值
如果设置为 true,则当前操作将仅使用 package-lock.json
,忽略 node_modules
。
对于 update
,这意味着仅 package-lock.json
将被更新,而不是检查 node_modules
并下载依赖项。
对于 list
,这意味着输出将基于 package-lock.json
描述的树,而不是 node_modules
的内容。
expect-results
- 默认值:null
- 类型:null 或布尔值
告诉 npm 是否期望命令返回结果。可以是 true(期望一些结果)或 false(期望没有结果)。
此配置不能与以下配置一起使用:expect-result-count
expect-result-count
- 默认值:null
- 类型:null 或数字
告诉 npm 预期命令返回特定数量的结果。
此配置不能与以下配置一起使用:expect-results