如何列出 package.json 中所有可用的命令?

How to list all the commands available in package.json?

一个package.json可以有很多命令,常见的有npm startnpm test,但一般命令比较多。

有没有办法列出所有命令?

目前我使用less package.json,但它有太多噪音无法显示。

您可以使用:

npm run

列出所有命令。 (Yarn 在 yarn run 上也具有类似的功能。)

此行为在 npm help run 的帮助页面中有明确说明:

This  runs an arbitrary command from a package's "scripts" object.  If no "command" is provided, it will list the available scripts.

如果您安装了 jq,要获得快速概览:

jq .scripts package.json

如果需要

,您仍然可以将该子集通过管道传输到 less
jq .scripts package.json | less

此外,您可以通过 npm-completion 使用 Tab 补全功能,然后您应该会在点击 Tab 键时看到可能的命令列表,如果只剩下一个选项,则可以完成命令。

您可以通过

临时设置
source <(npm completion)

根据您的终端,您可以通过添加到相关的配置文件来使其持久化:

npm completion >> ~/.bashrc
npm completion >> ~/.zshrc

这是仅使用节点的极简方法!

仅列出可用命令。

node -e "console.log(Object.keys(require('.' + require('path').sep + 'package.json').scripts || {}))"

列出所有可用命令及其目标。

node -e "console.log(require('.' + require('path').sep + 'package.json').scripts || {})"

更进一步,你可以把它变成一个运行命令! 在 package.json 中将其添加到 scripts.

示例:

"scripts": {
   "ls": "node -e \"console.log(require('.' + require('path').sep + 'package.json').scripts || {})\""
}

现在您可以 npm run ls !

我很惊讶没有人在 jq 中建议 to_entries() func,又名:

jq -r '.scripts|to_entries[]|((.key))' package.json
# output
lint
build:css
build:dev
build:node
build:release

这基本上意味着:

  • 选择 package.json 文件的 .scripts 部分
  • 使用行输出 - -r
  • 将 this 的对象转换为 .key .value 对
  • 仅显示密钥