如何为 npm 脚本提供使用信息



有没有一种简单的方法来提供 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 脚本调用此脚本。

  1. 创建一个简单的 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);
    
  2. usage.js保存在存储package.json的同一级别的项目根目录中。

  3. 将以下usage脚本添加到package.jsonscripts部分:

    ...
    "scripts": {
    "usage": "node usage",
    ...
    },
    ...
    
  4. 运行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}`

最新更新