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

时间:2018-06-05 16:38:47

标签: npm command-line-interface npm-scripts

是否有简单的方法为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,但感觉很笨。

1 个答案:

答案 0 :(得分:0)

简答:

是的,你是正确的,npm没有提供内置功能,可以在运行npm run时包含说明。因此,您选择的任何解决方案都会有一定程度的"感觉笨重" 与之相关。

正如您所提到的 npm-scripts-help是一个可以实现这一目标的软件包。我不知道其他类似的第三方解决方案。

替代自定义解决方案:

以下步骤描述了如何编写简单的自定义Nodejs实用程序脚本(不使用其他第三方程序包依赖项)。然后可以通过npm-scripts调用此脚本。

  1. 创建一个简单的Nodejs实用程序脚本,如下所示。让我们将文件命名为usage.js

    <强> usage.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脚本添加到scripts的{​​{1}}部分:

    package.json
  4. 运行... "scripts": { "usage": "node usage", ... }, ... 将使用信息打印到控制台。脚本名称(即npm run usage)必须与usage一起提供。不幸的是,您只需运行npm run即可记录npm的简单日志 - 其中不包含说明。

  5. 备注:

    • npm run的第二行,我们通过以下部分引用包名称变量:usage.js
    • 如果更改项目目录中存储${process.env.npm_package_name}的位置,则需要根据需要在npm脚本中重新定义其路径。例如,如果您选择将其存储在名为usage.json的文件夹中,该文件夹位于项目根目录中,则应将scripts脚本定义如下:

      usage

    添加ANSI / VT100控制序列

    您可以利用... "scripts": { "usage": "node scripts/usage", ... }, ... 中的ANSI/VT100 Control sequences为使用情况日志添加颜色和格式。

    例如,在以下usage.js中,代码为:

    • usage.js
    • \x1b[1m

    ...用于增加代码片段并分别将格式重置为默认值。

    提示:如果需要跨平台,我建议仅使用 ANSI 8/16颜色(在上一个链接中列出)。 粗体\x1b[0m)的格式代码在使用 Windows命令提示符 PowerShell 等终端的Windows cmd.exe中不起作用

    usage.js (带格式)

    \x1b[1m

    您还可以考虑将ES6 Template Literalsprocess.envpackage.json vars结合使用,以引用每个npm脚本的值。例如:

    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);