有没有一种简单的方法来提供 npm 脚本的使用信息?
理想情况下,当我运行npm run
时,我会得到这样的输出(注意每个任务底部的描述(:
Lifecycle scripts included in product-discovery-service:
start
node server.js
available via `npm run-script`:
watch
run-p watch:build watch:run
Run in development mode and rebuild/restart when changes are made
watch:build
npm run build:dev -- --watch
Probably don't need this (would be nice to be able to omit tasks like this)
watch:run
nodemon --watch build/ --inspect
Probably don't need this (would be nice to be able to omit tasks like this)
prewatch:run
wait-on --log build/server.js
Probably don't need this (would be nice to be able to omit tasks like this)
build
babel server.js --out-dir build/
Build the project
prebuild
rimraf build/
Probably don't need this (would be nice to be able to omit tasks like this)
build:dev
npm run build -- --source-maps
Probably don't need this (would be nice to be able to omit tasks like this)
看起来 npm 不支持这个,但也许有第三方有解决方案?我找到了npm-scripts-help,但它感觉很笨拙。
简短回答:
是的,你是对的,npm 不提供内置功能来在运行npm run
时包含描述。因此,您选择的任何解决方案都会有一定程度的"感觉笨拙"。
正如你提到的 npm-scripts-help是一个可以实现这一点的包。我不知道其他类似的第三方解决方案。
替代定制解决方案:
以下步骤介绍如何编写简单的自定义 Nodejs 实用工具脚本(不使用其他第三方包依赖项(。然后可以通过 npm 脚本调用此脚本。
创建一个简单的 Nodejs 实用程序脚本,如下所示。让我们将文件命名为
usage.js
。用法.js
const usage = ` Lifecycle scripts included in ${process.env.npm_package_name}: start node server.js available via `npm run-script`: watch run-p watch:build watch:run Run in development mode and rebuild/restart when changes are made watch:build npm run build:dev -- --watch Probably don't need this (would be nice to be able to omit tasks like this) watch:run nodemon --watch build/ --inspect ...` console.log('%s', usage);
将
usage.js
保存在存储package.json
的同一级别的项目根目录中。将以下
usage
脚本添加到package.json
的scripts
部分:... "scripts": { "usage": "node usage", ... }, ...
运行
npm run usage
将使用情况信息打印到控制台。脚本名称(即usage
(必须提供npm run
。不幸的是,你只运行npm run
的理想只会记录 npm 的简单日志 - 其中不包括描述。
笔记:
- 在
usage.js
的第二行,我们通过以下部分引用包名称变量:${process.env.npm_package_name}
如果更改
usage.json
在项目目录中的存储位置,则需要根据需要在 npm 脚本中重新定义它的路径。例如,如果选择将其存储在名为scripts
的文件夹中,该文件夹位于项目根目录中,则应按如下方式定义usage
脚本:... "scripts": { "usage": "node scripts/usage", ... }, ...
添加 ANSI/VT100 控制序列
您可以在usage.js
利用 ANSI/VT100 控制序列向使用日志添加颜色和格式。
例如,在以下usage.js
中,代码:
x1b[1m
x1b[0m
。用于加粗代码片段并分别将格式重置回默认值。
提示:如果需要跨平台,我建议仅使用ANSI 8/16颜色(在上一个链接中列出(。粗体(x1b[1m
(的格式代码在Windows cmd中不起作用.exe使用Windows命令提示符或PowerShell等终端。
用法.js(带格式(
const BOLD = 'x1b[1m';
const NORM = 'x1b[0m';
const formattedUsage = `
Lifecycle scripts included in ${BOLD}${process.env.npm_package_name}:${NORM}
${BOLD}start
node server.js${NORM}
available via ${BOLD}npm run-script${NORM}
${BOLD}watch
run-p watch:build watch:run${NORM}
Run in development mode and rebuild/restart when changes are made
${BOLD}watch:build
npm run build:dev -- --watch${NORM}
...`
console.log('%s', formattedUsage);
您还可以考虑将 ES6 模板文本与process.env
和 package.json vars 结合使用,以引用每个 npm 脚本的值。例如:
`${BOLD}${process.env.npm_package_scripts_watch}:${NORM}`